需要帮助解决 Https 网络服务器错误 - SSL 握手失败

需要帮助解决 Https 网络服务器错误 - SSL 握手失败

我遵循了以下指南: http://hints.macworld.com/article.php?story=20041129143420344

这是我的虚拟主机定义

<VirtualHost *:443>
    SSLEngine on
    SSLProxyEngine On
    RequestHeader set Front-End-Https "On"
    CacheDisable *
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    DocumentRoot "/Users/me/projects/myproject/public"
    ServerName ssl.mydomain.com
    ServerAlias *.ssl.mydomain.com
    SSLCertificateKeyFile "/private/etc/apache2/certs/webserver.nopass.key"
    SSLCertificateFile "/private/etc/apache2/certs/newcert.pem"
    SSLCACertificateFile "/private/etc/apache2/certs/demoCA/cacert.pem"
    SSLCARevocationPath "/private/etc/apache2/certs/demoCA/crl"
    ErrorLog "/Users/me/Desktop/ssl.log"

    ProxyPass / https://localhost:3002/
    ProxyPassReverse / https://localhost:3002
    ProxyPreserveHost on    
</VirtualHost>

当我尝试通过 Web 浏览器连接到服务器时,出现以下错误:

[Thu Feb 02 16:50:40 2012] [error] (502)Unknown error: 502: proxy: pass request body failed to 127.0.0.1:3002 (localhost)
[Thu Feb 02 16:50:40 2012] [error] [client 96.11.81.39] proxy: Error during SSL Handshake with remote server returned by /session/new
[Thu Feb 02 16:50:40 2012] [error] proxy: pass request body failed to 127.0.0.1:3002 (localhost) from 96.11.81.39 ()

我该如何调试/修复这个问题?

答案1

补充 vbartoni 的回答,似乎从 Apache 2.4 及更高版本开始,有不同的默认值和一个新的指令。

我正在运行 Apache 2.4.6,并且必须添加以下指令才能使其运行:

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off

答案2

我遇到了类似的问题(相同的错误日志),只是代理将 https 流量转发到另一台主机。
由于我很懒,而且主机位于我自己的隔离网络中,因此这些指令解决了该问题:

SSLProxyVerify none
SSLProxyCheckPeerCN off

答案3

不要在前端和后端服务器之间担心 HTTPS,为连接启用 SSL 没有什么意义localhost

为了澄清起见,使用ProxyPass / http://localhost:3002/而不是ProxyPass / https://localhost:3002/


或者,如果您确实希望使用 SSL 将反向代理连接到后端服务器(当该服务器不在 Apache Httpd 反向代理所在位置时非常有用),除了 之外https://backend-server-address,还可以使用SSLProxy*指令来设置 CA 证书,如中所述mod_proxy文档介绍。特别是,您需要配置SSLProxyCACertificateFile并确保后端服务器的证书颁发给正确的主机名Apache Httpd 所见(即localhost你的情况)。


如果您没有使用 SSL 连接到后端服务器,它可能无法检测到您实际上正在使用 SSL,并配置为强制您使用 SSL(因此无限重定向)。您可能希望查看与以下类似的机制:Jetty 有自己的forwarded选择(以便能够告诉后端它位于代理后面)。X-Forwarded-Proto默认情况下,Rails 可能能够解释。在这种情况下,将其添加到您的 Apache 配置中(在 SSL 虚拟主机中):

RequestHeader set X-Forwarded-Proto 'https'

似乎有类似的问题被讨论过这里, 例如。

答案4

如果后端服务器使用过时的自签名证书,则需要再增加一个选项(如果无法访问后端服务器):

SSLProxyCheckPeerExpire 关闭

相关内容