Журнал отображает TLSv1 вместо SSLv3
Я включил журналы в моем приложении, используя -Djavax.net.debug=all
вариант. Написанный код должен использовать протокол SSLv3, но в журналах при проверке он отображается как::
*** ClientHello, TLSv1
*** ServerHello, TLSv1
Насколько я понимаю из чтения, Клиент и Сервер используют TLSv1 для рукопожатия, но, поскольку я использовал SSLv3 в своем коде при инициализации сокета, в идеале он должен печатать SSLv3 вместо TLSv1.
Ниже приведен фрагмент кода, который я использовал:
SSLContextBuilder builder = new SSLContextBuilder();
builder.useProtocol("SSLv3");
SSLContext sslContext = builder.build();
Может кто-нибудь, пожалуйста, уточнить причину того же, или есть что-то еще, что я пропустил. Просто чтобы добавить, я нахожусь на Java 7.
1 ответ
Скорее всего SSLv3
просто не поддерживается сервером (что в настоящее время рекомендуется из-за безопасности), поэтому библиотека использует наименее поддерживаемые TLS
версия.
UPD: кажется, что формат hello ничего не говорит о том, какой протокол будет использоваться на самом деле. Есть кое-что из документов Java:
В настоящее время протоколы SSLv3, TLSv1 и TLSv1.1 позволяют отправлять приветствия SSLv3, TLSv1 и TLSv1.1, инкапсулированные в формат приветствия SSLv2. Для получения более подробной информации о причинах такой совместимости в этих протоколах см. Приложение E в соответствующих RFC (ранее перечисленных).
Обратите внимание, что некоторые серверы SSL/TLS не поддерживают формат приветствия v2 и требуют, чтобы клиент приветствовал в соответствии с форматами приветствия клиента SSLv3 или TLSv1.
Опция SSLv2Hello контролирует инкапсуляцию SSLv2. Если SSLv2Hello отключен на клиенте, то все исходящие сообщения будут соответствовать формату приветствия клиента SSLv3/TLSv1. Если SSLv2Hello отключен на сервере, то все входящие сообщения должны соответствовать формату приветствия клиента SSLv3/TLSv1.