apache - Apache 反向代理背后的自签名证书有问题吗?

标签 apache ssl proxy

我知道这个话题在一些较早的帖子中讨论过,尤其是 Will a self-signed certificate work behind an Apache reverse-proxy?由@Ryan 发布

我遇到了同样的问题,但无法解决。我将 Apache 2.4.12 设置为 Oracle HTTP 服务器前的反向代理。我在代理服务器上有有效证书,但在 Oracle HTTP 服务器上有自签名证书。目标是一直执行 https,但是每当浏览器到达 myhost.domain 时,它都会抛出证书警告(因为自签名证书)。在 Oracle HTTP 服务器上拥有真实证书不是一种选择,并且用户浏览器受到限制,因此不能忽略自签名证书警告。

这是我的虚拟主机


LogLevel ERROR
ServerName  myhost.domain
ServerAlias  xxx.xxx.xxx.xx
DocumentRoot D:/xyz/pubdocs
SSLEngine      On
SSLProxyEngine On
SSLCertificateFile      certs/myserver.crt
SSLCertificateKeyFile   certs/myserver.key
SSLCertificateChainFile certs/myserver_chain.crt
SSLProxyCACertificateFile certs/my_self_signed.pem
SSLProxyVerify none
SSLProxyCheckPeerName off
SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire off
SSLProtocol    -all +TLSv1
SSLProxyProtocol +SSLv3 +TLSv1 +TLSv1.1
#SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:!NULL:RC4+RSA:+HIGH:+MEDIUM
ErrorLog "logs/abc-error.log"
CustomLog "logs/abc-access.log" cert

ProxyRequests Off  
# IE compatibility
Header set X-UA-Compatible "IE=EmulateIE8"
# Prevent page from being loaded within an IFrame (Cross-Frame Scripting protection)
Header always append X-Frame-Options SAMEORIGIN
# Prevent mime sniffing exploint ; disabled breaks PEM Popup image rendering
# Header set X-Content-Type-Options: nosniff
# Disable caching
Header set Cache-Control "no-cache, must-revalidate, private"
# Enable X-XSS-Protection
Header set X-XSS-Protection: "1; mode=block"
ProxyPass / https://myhost.domain/
ProxyPassReverse / https://myhost.domain/

似乎使用以下指令对很多人都有效,但对我似乎不起作用

SSLProxyVerify 无

SSLProxyCheckPeerName 关闭

SSLProxyCheckPeerCN 关闭

SSLProxyCheckPeerExpire 关闭

还有什么我想念的吗。

感谢任何帮助。

谢谢, 拉吉

最佳答案

已经有一段时间了,但我们在 2022 年遇到了同样的问题。 这是设置和问题:

Reverse proxy Apache 2.4 (Public facing) <---> Keycloak 17 (Internal, works only with https)

所有这些都是作为 docker 容器创建的,并且由于 keycloak 被设计为仅在内部可见(在反向代理之后),我们决定使用自签名证书。请记住,每次构建容器时都会新创建自签名证书。

旁注:是的,您可以在没有证书颁发机构 (CA) 文件的情况下创建自签名证书。

当然,我们在 apache 配置中有上面提到的所有 SSL* 设置:

SSLProxyVerify none
SSLProxyCheckPeerName off
SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire off

事实证明,反向代理规则为:

ProxyPass "/auth/" "https://keycloak:8443"
ProxyPassReverse "/auth/" "http://keycloak:8443"
RewriteRule "^/auth$" "/auth/" [R,L]

不起作用。结果是 502 Bad Gateway 错误。 这是因为 Apache 对我们的 keycloak 的自签名证书有问题。显然这是 proxy_http 模块中的错误。

我们的解决方案:

使用 proxy_http2 模块就像一个魅力:

ProxyPass "/auth/" "h2://keycloak:8443"
ProxyPassReverse "/auth/" "h2://keycloak:8443"
RewriteRule "^/auth$" "/auth/" [R,L]

注意区别 https:// vs h2://

当然,要使其正常工作,您还需要加载 proxy_http2 模块:

  • http(s)://something 条目与 proxy_http 模块一起工作
  • h2://something 条目与 proxy_http2 模块一起工作

关于apache - Apache 反向代理背后的自签名证书有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37426547/

相关文章:

php - 与同一 python 脚本的多个实例共享变量的最佳方法

Apache 2.2 phpinfo() 配置文件 (php.ini) 路径与 httpd.conf 不匹配

apache - 在SOLR中查询时忽略特殊字符

java - Jetty:如何在 Jetty 客户端使用 SSL

c# - 如何设置要在 C# 中使用的代理自动配置脚本 (.pac)?

c# - 如何使我的 WCF 服务调用通过已配置的本地代理服务器?

apache - 无法在 Ubuntu 16.04 桌面上安装 mesos

c++ - 安全断开 asio SSL 套接字的正确方法是什么?

ssl - CouchDB SSL 握手错误

javascript - 如何在nodejs中为多个目标设置反向代理?