1

現在、SSLv3 を無効にした APR コネクタを使用して、Tomcat サーバーを Tomcat 7 にアップグレード中です。ここに私のコネクタがあります:

<Connector port="8443" maxHttpHeaderSize="8192"
           maxThreads="150"
           enableLookups="false" disableUploadTimeout="true"
           acceptCount="100" scheme="https" secure="true"
           SSLEnabled="true" 
           SSLProtocol="TLSv1"
           SSLCertificateFile="${CP_ROOT}/security/tomcat.crt"
           SSLCertificateKeyFile="${CP_ROOT}/security/tomcat.key" />

すべてが正常に機能しているようです... たとえば、HTTPS 経由でページに移動すると、そのページが正しく表示されます。ただし、F5 ロード バランサーを使用しており、SSLv3 を無効にするとすぐに、構成されたヘルス モニターがそのノード/ポートで失敗し始めました。F5 側でトラブルシューティングを行った後、OpenSSL の診断を試みることにしました。

$ openssl s_client -connect casrept2.tc.columbia.edu:8443/cas/monitor.jsp      
CONNECTED(00000003)
write:errno=54

同じことを行いますが、TLSv1 ( -tls1) を強制すると、適切に接続できます。

$ openssl s_client -connect casrept2.tc.columbia.edu:8443/cas/monitor.jsp -tls1
CONNECTED(00000003)
... cert chain, etc, etc

それがヘルスモニターの失敗の原因なのだろうかと思っています。いずれにせよ、なぜこれを機能させるために特に強制する必要があるのか​​ 興味があり-tls1ます。正しいプロトコルを自動ネゴシエートする必要があると思いますか?

4

1 に答える 1

4

どのバージョンopensslを使用していs_clientますか? 0.9.8系だとデフォルトでプロトコルssl2,ssl3,tls1(.0)になり、SSL2形式のClientHelloを使う必要があります(内容はtls1.0までネゴシエート可能)。(デフォルトの自動検出の代わりに) tls1-only が指定された Tomcat/APR の openssl サーバーは、SSL3+ 形式の場合はネゴシエートするか、必要に応じてアラートを返しますが、SSL2 形式の場合は TCP 接続を閉じるだけです。 Windows では RST で「異常に」そうs_clientするため、syscall エラーが発生し、表示されるメッセージが表示されます。(54 は errno 値ですが、RST で見た記憶がありません。OS を教えてください。)

指定s_client -tls1することで、バージョン 3.1 = TLS1.0 を含む SSL3+ 形式を使用するようになり、機能します。代わりに使用する-ssl3と、ネゴシエートできませんがalert handshake failure、単なる TCP エラーではなく、より具体的なエラーが発生します。SSL3+ フォーマットを使用し、TLS1.0 をネゴシエートする を使用する場合-no_ssl2、ここでは より便利ではありません-tls1

openssl 1.0.0 または 1.0.1 シリーズを使用する場合、s_clientデフォルトで最小 SSL3 および (したがって) SSL3+ hello 形式になり、ビルド プロセスで異常が行われない限り動作します。

F5モニターがここで何をするか、またはできるかはわかりませんが、最大限に相互運用可能である、または過去にそうであった理論に基づいて、SSL2形式のhelloを試しても驚かないでしょう。その場合、サーバーに問題があると解釈される接続障害が発生する可能性があります。www.wireshark.org などのトレースをサーバー (またはサーバーの近く) に置き、F5 が送信するものを正確に確認し、サーバーが RST で応答することを確認できます。

于 2014-12-11T02:29:37.600 に答える