web-dev-qa-db-ja.com

Https Webサーバーエラーのトラブルシューティングのヘルプが必要-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>

そして、sevre viov 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 ()

これをデバッグ/修正するにはどうすればよいですか?

9
NullVoxPopuli

Vbartoniの答えに追加すると、Apache 2.4以降では、異なるデフォルトと新しいディレクティブがあるようです。

私はApache 2.4.6を実行していますが、それを機能させるために次のディレクティブを追加する必要がありました。

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
12
mydoghasworms

フロントエンドサーバーとバックエンドサーバーの間でHTTPSを気にしないでください。localhost接続に対してSSLを有効にしても意味がありません。

明確にするには、ProxyPass / http://localhost:3002/の代わりにProxyPass / https://localhost:3002/を使用します


または、SSLを使用してリバースプロキシをバックエンドサーバーに接続したい場合(そのサーバーがApache Httpdリバースプロキシがない場合に最も役立ちます)、https://backend-server-addressに加えて、 SSLProxy*ディレクティブは、 _mod_proxy documentation の概要に記載されているように、CA証明書を設定します。特に、SSLProxyCACertificateFileを構成し、バックエンドサーバーの証明書が正しいホスト名に対して発行されていることを確認する必要がありますApache Httpdで確認(つまり、localhostあなたの場合)。


SSLを使用してバックエンドサーバーに接続していない場合、実際にSSLを使用していることを検出できず、SSLに強制的に移動するように構成されている可能性があります(そのため、無限リダイレクト)。 Jettyがforwardedオプション を使って行うことと同様のメカニズムを確認することをお勧めします(バックエンドがプロキシの背後にあることを認識できるようにするため)。 RailsはデフォルトでX-Forwarded-Protoを解釈できる可能性があります。この場合、これを(SSL仮想ホストの)Apache構成に追加します:

RequestHeader set X-Forwarded-Proto 'https'

たとえば、 こちら で説明されている同様の問題があるようです。

3
Bruno

プロキシが別のホストにhttpsトラフィックを転送していたことを除いて、同様の問題(同じエラーログ)がありました。
私は怠惰で、ホストが自分の隔離されたネットワークにあるので、これらのディレクティブは問題を解決しました:

SSLProxyVerifyなし
SSLProxyCheckPeerCNオフ

3
vbartoni

バックエンドサーバーが古い自己署名証明書を使用している場合、もう1つのオプションが必要です(バックエンドサーバーにアクセスできない場合)。

SSLProxyCheckPeerExpireオフ

1
Milan Kerslager