Tomcat поддерживает TLS v1.2? - PullRequest
15 голосов
/ 17 марта 2012

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

Ответы [ 4 ]

15 голосов
/ 16 октября 2015

У меня есть похожий вариант использования, который позволяет 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.Только 22 места, которые нужно потрогать:

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.

12 голосов
/ 19 марта 2012

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

8 голосов
/ 16 октября 2014

Как уже упоминалось, 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.

2 голосов
/ 10 августа 2012

Я также хотел обновить 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...