SSLSocket.getEnabledProtocols()
メソッドは、[SSLv2Hello, SSLv3, TLSv1]
を返します。 JSSEはないサポートしていますと言う2(確かに古い)の参照をなぜJavaのSSLSocketはバージョン2のクライアントを送信しますか?
main, WRITE: TLSv1 Handshake, length = 81
main, WRITE: SSLv2 client hello message, length = 110
しかし、私が見つけた:私はconnect()
を呼び出すと、私はSSLのデバッグをオンにしているときには確かに、私はv2のクライアントのhelloが使用されていることがわかりSSLバージョン2:Fundamental Networking in Javaから
:
'でSSLv2Hello' はJavaはSSLv2の 'ハローメッセージ' とハンドシェイクを開始することを可能に擬似プロトコルです。これはではありません。は、SSLv2プロトコルの使用を引き起こします。これは、Javaではまったくサポートされていません。
そしてJSSE Reference Guideから:
は今、私の理解では、バージョン2.0クライアントのhelloのみクライアント がサポートSSLバージョン2.0を実行したときに送信されるべきであるということです。 RFC 2246から:SSLバージョンをサポートJSSE実装J2SDK 1.4以降では、SSL 3.0およびTLS 1.0を実装しています。 SSL 2.0を実装していません。
TLS 1.0クライアント2.0のサーバーがSSLに バージョン2.0クライアントhelloメッセージ[SSL2] ... 警告を送信する必要があります:能力を2.0クライアントhelloメッセージを段階的に廃止されるバージョンを送信しますすべての急いで急いで。
なぜJavaはそれを使用していますか?
SSLv2Helloは、Sun/Oracle Java 6のJSSEではデフォルトでオンになっていますが、Java 7以降ではオンになっています。例えば、Java 6の場合はwww.howismyssl.comでコネクションを開きます。 – eckes