Ответ 1
Вот довольно подробный ответ, который я написал некоторое время назад, описывая разницу между SSL и TLS. Короче говоря, TLS является преемником SSL, а TLS 1.0 можно рассматривать как "SSL 3.1".
Если вы посмотрите на Справочное руководство JSSE в разделе SSLContext, в нем говорится:
Эти статические методы возвращают экземпляр, который реализует по крайней мере запрошенный протокол защищенного сокета. Возвращенный экземпляр может также реализуйте другие протоколы. Например, getInstance ( "TLSv1" ) может верните экземпляр, который реализует "TLSv1", "TLSv1.1" и "TLSv1.2".
Это также упоминается в документе Стандартные имена.
В частности, если вы проверите исходный код Oracle/OpenJDK 7 для SSLContextImpl, вы обнаружите, что все его SSLContext
поддержка всех протоколов (из SSLv3 с использованием клиента SSLv2 Hello to TLS 1.2). Что отличает, какие протоколы включены по умолчанию. Кроме того, вы не должны полагаться на это в целом, поскольку другие реализации Java (например, IBM JRE) могут вести себя по-разному.
Если вы хотите, чтобы для соединения использовался определенный набор протоколов, вы должны использовать метод SSLSocket
или SSLEngine
setEnabledProtocols
. В противном случае он будет использовать значения по умолчанию, как описано в Документация поставщиков.