Как найти версию SSL/TLS в Java
У меня есть клиент на основе java (с использованием java 1.6.30), который открывает SSL-соединение с моим сервером, установленным на Tomcat 7.0.26. Tomcat использует Java 6, а в server.xml я сконфигурировал соединитель для использования sslProtocol="TLS"
.
Интересно, какая версия SSL используется? Это TLS1.0? TLS1.1? Что-то еще?
Ответы
Ответ 1
Получите SSLSession
от своего SSLSocket
на своем клиенте и используйте его метод getProtocol()
.
Oracle JRE/OpenJDK 6 поддерживает SSLv3 и TLS 1.0. Вам потребуется как минимум IBM JRE 6/7 или Oracle JRE/OpenJDK 7, чтобы получить поддержку TLS 1.1 и TLS 1.2. (Это также относится к доступным комплектам шифров, как указано в этом вопросе.)
Ответ 2
Вы можете использовать следующий фрагмент кода для получения массива поддерживаемых протоколов:
SSLContext.getDefault().getSupportedSSLParameters().getProtocols()
Если вы хотите, чтобы это была строка с пробелами, например, для согласования SMTP передайте массив в String.join(), т.е.
String.join(" ", SSLContext.getDefault().getSupportedSSLParameters().getProtocols())
Последний фрагмент кода показан в Java 8 в Windows:
SSLv2Hello SSLv3 TLSv1 TLSv1.1 TLSv1.2
И в Java 11 для Windows:
TLSv1.3 TLSv1.2 TLSv1.1 TLSv1 SSLv3 SSLv2Hello
Ответ 3
Вы можете узнать, какую версию TLS использует ваш код, установив системное свойство: передайте -Djavax.net.debug=all
в команду java, которая запускает приложение. Когда приложение согласовывает соединение SSL, оно печатает версию TLS, ищите строку "HelloClient" в выходных данных.
Для получения дополнительной информации см. https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html
Ответ 4
для tomcat 8.5.38 и 8.5.46 (и, вероятно, tomcat 7.0x и новее) добавление этого в шаблон AccessLogValve (в server.xml) - и включение этого Valve - покажет используемую версию TLS:
%{org.apache.tomcat.util.net.secure_protocol_version}r
eg
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" %{org.apache.tomcat.util.net.secure_protocol_version}r />