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

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

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

回答:


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-addressSSLProxy*ディレクティブを使用してドキュメントの概要に記載されているmod_proxy CA 証明書。特に、SSLProxyCACertificateFileバックエンドサーバーの証明書が、Apache Httpdで表示される正しいホスト名(つまりlocalhost、この場合)に発行されるように構成して確認する必要があります。


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

RequestHeader set X-Forwarded-Proto 'https'

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


SSLProxyはそのリンクで一度だけ言及されます。使い方の例はありません。リクエストヘッダーをX-Forwarded-Proto 'https'に設定するように変更しましたが、それでも機能しません/同じエラーが発生します。行くlocalhostを:3002はまた、同じエラー与えます
NullVoxPopuli

localhostを使用してhttpsに接続する正当な理由があります:HTTPSバックエンドのsocket.ioの例。混合コンテンツのエラーが発生します。
Florestan06 2015年

3

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

SSLProxyVerify none
SSLProxyCheckPeerCN off


1

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

SSLProxyCheckPeerExpireオフ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.