我知道这个话题在一些较早的帖子中讨论过,尤其是 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/