2012-03-17 85 views
13

Quiero saber si Apache Tomcat admite el protocolo TLS v1.2. ¡No encontré ninguna documentación sobre esto! ¡Gracias!¿Tomcat admite TLS v1.2?

+0

Tomcat no es compatible con TLS en absoluto. Es Java (a través de JSSE) o OpenSSL que lo admite. La versión de TLS que admiten depende de la versión que sean. Tu pregunta está mal formada. – EJP

Respuesta

11

TLS versión 1.2 es compatible con Oracle JDK versión 7, en la implementación de JSSE. Como Tomcat usa JSSE como biblioteca SSL subyacente, debe ser compatible con JDK versión 1.7 en adelante. También verifique sus suites de cifrado SSL habilitadas en Tomcat.

Si está utilizando Apache como un proxy, consulte la documentación de Apache y subyacente de OpenSSL.

Algunos enlaces:

http://docs.oracle.com/javase/7/docs/technotes/guides/security/enhancements-7.html (Java SE 7 Mejoras en la seguridad)

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

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

+0

¡Muchas gracias! Finalmente obtuve TLS v1.2 en Tomcat usando la configuración JSSE. – observer

+1

podría decirme qué cambió todo para eso, traté de especificar sslProtocol = "TLSv1.1" en el conector pero eso no funcionó. – Ashish

2

También estaba buscando para actualizar sslProtocol a TLSv1.1 y como se menciona en el siguiente enlaces en Java6 y 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

El SSLContext apoyado en java6 son SSL, TLSv1 y en Java7 SSL, TLSv1, TLSv1.1 y TLSv1.2 son compatibles.

Por lo tanto, para habilitar TLSv1.1 o TLSv1.2 en tomcat, simplemente actualice a Java7 y cambie el sslProtocol en el conector en server.xml de tomcat.

8

Como lo mencionaron otros, Tomcat admite TLSv1.2 a través de JSSE en JDK 7+.

Tomcat NO es compatible con TLSv1.1 o TLSv1.2 cuando se utiliza con Tomcat Native (APR). Ver https://issues.apache.org/bugzilla/show_bug.cgi?id=53952.

Actualización: parece que finalmente se admitirá TLSv1.2 en Tomcat Native 1.1.32 y Tomcat 8.0.15/7.0.57.

9

Tengo un caso de uso similar, que es para permitir que Tomcat 7 use estrictamente solo TLSv1.2, para no recurrir a protocolos SSL anteriores como TLSv1.1 o SSLv3. Los siguientes pasos responderán cómo habilitar Tomcat para admitir TLSv1.2.

Estoy usando: C: \ apache-tomcat-7.0.64-64bit y C: \ Java64 \ jdk1.8.0_60.

siguiendo estas instrucciones: https://tomcat.apache.org/tomcat-7.0-doc/security-howto.html. Tomcat es relativamente simple de configurar el soporte de SSL.

De muchas referencias he probado muchas combinaciones, finalmente encontré 1 que forzará a Tomcat 7 a aceptar TLSv1.2 solamente. 2 lugares necesarios para tocar:

1) En 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" /> 

donde

keyStoreFile = local confianza autofirmado tienda

org.apache.coyote.http11.Http11Protocol = Implementación JSSE BIO.

No utilizamos org.apache.coyote.http11.Http11AprProtocol, ya que funciona con openssl. El openssl subyacente retrocederá para admitir protocolos SSL anteriores.

2) Cuando inicie Tomcat, habilite los siguientes parámetros de entorno.

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 restricción se requiere, de lo contrario Tomcat (que es accionado por Java8) caerá de nuevo para apoyar protocolos SSL anteriores.

Puesta en servicio Tomcat C: \ apache-tomcat-7.0.64-64bit \ bin \ startup.bat

Podemos ver JAVA_OPTS aparece en el registro de inicio de 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 

Luego, podemos usar el comando openssl para verificar nuestra configuración. Primero, conecte localhost: 8443 con el protocolo TLSv1.1. Tomcat se niega a responder con el certificado del servidor.

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 

Conectar localhost: 8443 con el protocolo TLSv1.2, Tomcat respuestas ServerHello con el certificado:

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 

Esto demuestra que Tomcat ahora responde estrictamente a la solicitud TLSv1.2 solamente.