多くのSSLクライアント、特にJDK 6はSSLv2Helloプロトコルを使用してサーバーとハンドシェイクします。このプロトコルを使用することはしないことは、SSL 2.0または3.0を使用していることを意味します。 どのプロトコルを使用するかを決定するための単なるハンドシェイクです。 [ http://tools.ietf.org/html/rfc5246#appendix-E.2]
ただし、Apacheでは、SSLv3サポートを無効にすると、SSLv2Helloプロトコルのサポートが明らかに削除されます。 Apache TomcatはSSLv2Helloを明示的にサポートしています。つまり、有効にすることはできますが、SSLv3を有効にすることはできません。
Apacheでこれを行う方法はありますか?
[更新]
これは私のプロトコル設定です:
SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2 -SSLv3
どうやらmod_sslは昨年かそこらで変更されました(ソースへの正確なコミットはわかりませんが、「問題」が見つかりました)。ソースはこれを行います:
If SSLProtocol only includes only one Protocol:
Handshake = That Protocol's Handshake Only
Else
Handshake = SSLv2 Handshake
この設定のオーバーライドはありません。あなたができる唯一のことは、ソースを編集して、あなた自身のバージョンを再コンパイルすることです。独自にコンパイルする場合は、SSLv2ハンドシェイクの互換性を強制する diff を作成しました。
したがって、これはずっと問題ではなかったことがわかりました。 Apacheは、上記で投稿した構成のいずれかでSSLv2ハンドシェイクを受け入れます。私はこれが問題であると考えるように、ハンドシェイクエラーに惑わされました。実際には、サーバーがクライアントのCAを信頼していない構成の問題にすぎません。