2

SSLv2を使用してリモートサーバーとのSSL接続を開始したい。私はJavaを使用しています。以下を使用して、ソケットでサポートされているプロトコルを取得しようとしました。

String[] suppProtocols=socket.getSupportedProtocols();
System.out.println("The protocols supported for this socket are: 
"+Arrays.toString(suppProtocols));

そして私はこれを出力で得ました:

[SSLv2Hello, SSLv3, TLSv1, TLSv1.1, TLSv1.2]

ここで、JavaはSSLv2をサポートしておらず、SSLv2HelloはSSLv2を使用してhelloメッセージを送信するだけであることを読みました。これが何を意味するのか理解できませんか?クライアントがSSLv2をサポートしている場合と同じではありませんか?SSLv2を使用してSSL接続を確立するにはどうすればよいですか。

4

1 に答える 1

4

SSLv3およびTLSv1.xは、 TLS仕様:SSLとの下位互換性で説明されているように、ClientHelloメッセージをSSLv2ClientHelloでラップする方法を提供します。SSLv3およびTLS1以降には、バージョンをネゴシエートするためのより一貫性のあるメカニズムがあります。TLS仕様にあるように:

バージョン2.0クライアントのhelloメッセージを送信する機能は、急いで段階的に廃止されます。実装者は、可能な限り迅速に前進するためにあらゆる努力をする必要があります。バージョン3.0は、新しいバージョンに移行するためのより優れたメカニズムを提供します。

Sun /OracleJREまたはOpenJDKはSSLv2をサポートしていません。SSLv3 +メッセージをSSLv2メッセージにラップするのは、下位互換性のためだけです。Java7のクライアントではデフォルトで無効になっています。サーバーの観点からは、SSLv2をサポートしているかどうかに関係なく、少なくとも、ClientHelloメッセージをSSLv2メッセージでラップする他のSSLv3+クライアントを受け入れることができます。

この質問で、Javaサポート(他の実装を含む)の詳細を確認できます。

一般的に、SSLv2は安全でないと見なされます。単に使用しないでください。一般的な傾向は、SSLv3からTLS 1.0以降に移行することであり、逆行することはありません。

于 2012-10-07T23:48:40.293 に答える