Подтвердить что ты не робот

Поддерживает ли Tomcat TLS v1.2?

Я хочу знать, поддерживает ли Apache Tomcat протокол TLS v1.2. Я не нашел никакой документации об этом! Спасибо!

4b9b3361

Ответ 1

Версия TLS версии 1.2 поддерживается версией JDK Oracle 7 в реализации JSSE. Поскольку Tomcat использует JSSE в качестве базовой библиотеки SSL, она должна поддерживаться с версии JDK версии 1.7 и далее. Также проверьте свои включенные SSL-шифры в Tomcat.

Если вы используете Apache в качестве прокси-сервера, проверьте документацию Apache и базовую документацию OpenSSL.

Некоторые ссылки:

http://docs.oracle.com/javase/7/docs/technotes/guides/security/enhancements-7.html (Улучшения безопасности Java SE 7)

http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html

http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html

Ответ 2

У меня есть аналогичный вариант использования, который позволяет Tomcat 7 строго использовать только TLSv1.2, а не возвращаться к более ранним протоколам SSL, таким как TLSv1.1 или SSLv3. Следующие шаги помогут ответить, как включить Tomcat для поддержки TLSv1.2.

Я использую: C:\apache-tomcat-7.0.64-64bit и C:\Java64\jdk1.8.0_60.

Следуя этой инструкции: https://tomcat.apache.org/tomcat-7.0-doc/security-howto.html. Tomcat относительно прост в настройке поддержки SSL.

Из многих ссылок я проверил много комбинаций, наконец, я нашел 1, который заставит Tomcat 7 принимать TLSv1.2 только. 2 места, которые необходимо коснуться:

1) В C:\apache-tomcat-7.0.64-64bit\conf\server.xml

<Connector port="8443" 
 protocol="org.apache.coyote.http11.Http11Protocol"
 maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
 keystoreFile="ssl/.keystore" keystorePass="changeit"
 clientAuth="false" sslProtocol="SSL" sslEnabledProtocols="TLSv1.2" />

где

keystoreFile = локальное самозаверенное хранилище доверия

org.apache.coyote.http11.Http11Protocol = реализация JSSE BIO.

Мы не используем org.apache.coyote.http11.Http11AprProtocol, потому что он работает от openssl. Основополагающий openssl отпадет, чтобы поддерживать более ранние протоколы SSL.

2) При запуске Tomcat включите следующие параметры среды.

set JAVA_HOME=C:\Java64\jdk1.8.0_60
set PATH=%PATH%;C:\Java64\jdk1.8.0_60\bin
set CATALINA_HOME=C:\apache-tomcat-7.0.64-64bit
set JAVA_OPTS=-Djdk.tls.client.protocols="TLSv1.2" -Dsun.security.ssl.allowUnsafeRenegotiation=false -Dhttps.protocols="TLSv1.2"

Требуется ограничение JAVA_OPTS, в противном случае Tomcat (который работает на Java8) отпадет, чтобы поддерживать более ранние протоколы SSL.

Запустите Tomcat C:\apache-tomcat-7.0.64-64bit\bin\startup.bat

Мы видим, что JAVA_OPTS появляется в журнале запуска Tomcat.

Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djdk.tls.client.protocols=TLSv1.2
Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dsun.security.ssl.allowUnsafeRenegotiation=false
Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dhttps.protocols=TLSv1.2

Затем мы можем использовать команду openssl для проверки нашей настройки. Сначала подключите localhost: 8443 с протоколом TLSv1.1. Tomcat отказывается отвечать сертификатом сервера.

C:\OpenSSL-Win32\bin>openssl s_client -connect localhost:8443 -tls1_1
Loading 'screen' into random state - done
CONNECTED(000001C0)
5372:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:.\ssl\s3_pkt.c:362:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 0 bytes

Соедините localhost: 8443 с протоколом TLSv1.2, Tomcat отвечает ServerHello с сертификатом:

C:\OpenSSL-Win32\bin>openssl s_client -connect localhost:8443 -tls1_2
Loading 'screen' into random state - done
CONNECTED(000001C0)
depth=1 C = US, ST = Washington, L = Seattle, O = getaCert - www.getacert.com
verify error:num=19:self signed certificate in certificate chain
---
Certificate chain
0 s:/C=SG/ST=SG/L=Singapore/O=Xxxx/OU=Development/CN=Myself
   i:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
1 s:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
   i:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
---
Server certificate
-----BEGIN CERTIFICATE-----
(ignored)
-----END CERTIFICATE-----
subject=/C=SG/ST=SG/L=Singapore/O=Xxxx/OU=Development/CN=Myself
issuer=/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 2367 bytes and written 443 bytes

Это доказывает, что Tomcat теперь строго отвечает только запросу TLSv1.2.

Ответ 3

Как упоминалось другими, Tomcat поддерживает TLSv1.2 через JSSE в JDK 7 +.

Tomcat НЕ поддерживает TLSv1.1 или TLSv1.2 при использовании с Tomcat Native (APR). См. https://issues.apache.org/bugzilla/show_bug.cgi?id=53952.

Обновление: похоже, что TLSv1.2, наконец, будет поддерживаться в Tomcat Native 1.1.32 и Tomcat 8.0.15/7.0.57.

Ответ 4

Я также хотел обновить sslProtocol до TLSv1.1 и, как упоминалось ниже, на Java6 и Java7

Java6 http://docs.oracle.com/javase/6/docs/technotes/guides/security/SunProviders.html Java7 http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html

SSLContext, поддерживаемый в Java6, - это SSL, TLSv1 и Java7. Поддерживаются SSL, TLSv1, TLSv1.1 и TLSv1.2.

Итак, чтобы включить TLSv1.1 или TLSv1.2 в tomcat, просто обновите до Java7 и измените sslProtocol в Connector в server.xml tomcat.