Метод SSLSocket.getEnabledProtocols()
возвращает следующее: [SSLv2Hello, SSLv3, TLSv1]
.И действительно, когда я звоню connect()
и у меня включена отладка SSL, я вижу, что используется клиент v2 hello:
main, WRITE: TLSv1 Handshake, length = 81
main, WRITE: SSLv2 client hello message, length = 110
Но я нашел две (по общему признанию старые) ссылки, которые говорят, что JSSE делает не поддержка SSL версии 2:
С Основные сети в Java :
SSLv2Hello - это псевдопротокол, который позволяет Javaинициировать рукопожатие с помощью приветственного сообщения SSLv2.Это не вызывает использование протокола SSLv2, который вообще не поддерживается Java.
И из Справочного руководства JSSE :
Реализация JSSE в J2SDK 1.4 и более поздних версиях реализует SSL 3.0 и TLS 1.0.Он не реализует SSL 2.0.
Теперь я понимаю, что клиент 2.0 версии hello следует отправлять только тогда, когда клиент поддерживает SSL версии 2.0.От RFC 2246 :
Клиенты TLS 1.0, поддерживающие серверы SSL версии 2.0, должны отправлять приветственные сообщения клиента SSL версии 2.0 [SSL2] ... Предупреждение: Возможность отправлять приветственные сообщения клиента версии 2.0 будет полностью прекращена.
Так почему же Java использует его?