Почему Java ' s SSLSocket отправляет привет клиенту версии 2?

Метод SSLSocket.getEnabledProtocols () возвращает следующее: [SSLv2Hello, SSLv3, TLSv1] . И действительно, когда я вызываю connect () и у меня включена отладка SSL, я вижу, что используется приветствие клиента v2:

main, WRITE: TLSv1 Handshake, length = 81
main, WRITE: SSLv2 client hello message, length = 110

Но я нашел две (правда, старые) ссылки, в которых говорится, что JSSE делает не поддерживает SSL версии 2:

From Фундаментальные сети в Java :

SSLv2Hello - это псевдопротокол, который позволяет Java инициировать рукопожатие с помощью SSLv2 'hello сообщение'. Это не вызывает использование протокола SSLv2, который вообще не поддерживается Java.

И из Справочного руководства JSSE :

Реализация JSSE в J2SDK 1.4 и выше реализует SSL 3.0 и TLS 1.0. Он не реализует SSL 2.0.

Теперь я понимаю, что приветствие клиента версии 2.0 должно отправляться только тогда, когда клиент поддерживает SSL версии 2.0. Из RFC 2246 :

Клиенты TLS 1.0, поддерживающие серверы SSL версии 2.0, должны отправлять SSL 0 клиентское приветствие должно отправляться только тогда, когда клиент поддерживает SSL версии 2.0. Из RFC 2246 :

Клиенты TLS 1.0, поддерживающие серверы SSL версии 2.0, должны отправлять SSL 0 клиентское приветствие должно отправляться только тогда, когда клиент поддерживает SSL версии 2.0. Из RFC 2246 :

Клиенты TLS 1.0, поддерживающие серверы SSL версии 2.0, должны отправлять SSL Приветственные сообщения клиента версии 2.0 [SSL2] ... Предупреждение: Возможность посылать приветственные сообщения клиента версии 2.0 будет постепенно прекращена.

Так почему же Java использует это?

23
задан Matt Solnit 13 January 2011 в 17:11
поделиться