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

Nul*_*uli 10 ssl https virtualhost apache-2.2

我遵循了本指南: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>
Run Code Online (Sandbox Code Playgroud)

当我尝试连接到 Web 浏览器的 sevre viov 时,出现此错误:

[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 ()
Run Code Online (Sandbox Code Playgroud)

我该如何调试/解决这个问题?

小智 13

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

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

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
Run Code Online (Sandbox Code Playgroud)

  • 这样做的工作 - 只有所有这些指令它不会抱怨。 (2认同)

Bru*_*uno 2

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

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


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


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

RequestHeader set X-Forwarded-Proto 'https'
Run Code Online (Sandbox Code Playgroud)

例如,这里似乎讨论了类似的问题。