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


9

我遵循了该指南: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浏览器连接到sevre时,出现此错误:

[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 ()

如何调试/修复此问题?

Answers:


12

为了增加vbartoni的答案,似乎从Apache 2.4起,有不同的默认值和新指令。

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

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off

1
这样就可以了-只有所有这些指令都不会抱怨。
MichaelBöckling2014年

@MichaelBöckling谢谢您阻止了我。我要特别指出的是,该文档指出该内容SSLProxyCheckPeerName已被取代,SSLProxyCheckPeerCN但除非您指定所有指令,否则它不会起作用。
2015年

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'

似乎有一个类似的问题讨论在这里,例如。


SSLProxy在该链接上仅被提及一次。没有如何使用它的例子。我将请求标头更改为X-Forwarded-Proto'https'...,但仍然无法正常工作/我遇到了同样的错误。转到localhost:3002也会产生相同的错误
NullVoxPopuli 2012年

有充分的理由使用本地主机连接到https:HTTPS后端中的示例socket.io。它将通过错误混合内容。
Florestan06 2015年

3

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

SSLProxyVerify none
SSLProxyCheckPeerCN off


1

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

SSLProxyCheckPeerExpire关闭

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.