Saltar al contenido

¿Cómo desactivo la compatibilidad con SSLv3 en Apache Tomcat?

Solución:

Solución 1:

Según la versión de Tomcat 5 y la versión 6, es posible que SSLEnabled = “true” no funcione, ya que se agregó a mitad de la versión. Para superar esto, solo necesita editar lo siguiente: sslProtocols = TLS To: sslProtocols = “TLSv1, TLSv1.1, TLSv1.2”

Parece extraño, pero a pesar de que dice TLS, contiene SSL 3.

Esto lo solucionó en nuestras instancias de Tomcat 5.5.20 y Tomcat 6. -Greg

Creo que lo que debes hacer es:

Jboss:

<Connector protocol="HTTP/1.1" SSLEnabled="true" 
       enableLookups="true" disableUploadTimeout="true"
       acceptCount="100"  maxThreads="200"
       scheme="https" secure="true" clientAuth="false" 
       keystoreFile="${jboss.server.home.dir}/conf/keystore.jks"
       keystorePass="rmi+ssl"
       sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

No estoy seguro de la definición de la suite de cifrado, sin embargo, sslprotocols debe establecerse en TLSv1, TLSv1.1, TLSv1.2

Dependiendo de su versión de Tomcat, será diferente, otras posibles soluciones:

Tomcat 5 y 6

<Connector...
   enableLookups="true" disableUploadTimeout="true"
   acceptCount="100"  maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
   clientAuth="false" sslEnabledProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

** En las distribuciones basadas en RHEL5, lo siguiente se aplica a las versiones de Tomcat 6 anteriores a Tomcat 6.0.38 **

Tenga en cuenta que TLSv1.1,TLSv1.2 es compatible con Java 7, no con Java 6. Agregar estas directivas a un servidor que ejecuta Java 6 es inofensivo, pero no habilitará TLSv1.1 y TLSv1.2.

<Connector...
   enableLookups="true" disableUploadTimeout="true"
   acceptCount="100"  maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
   clientAuth="false" sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

Tomcat> = 7

<Connector...
       enableLookups="true" disableUploadTimeout="true"
       acceptCount="100"  maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
       clientAuth="false" sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

Conectores APR de Tomcat

<Connector...
               maxThreads="200"
               enableLookups="true" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               SSLEnabled="true" 
               SSLProtocol="TLSv1"
               SSLCertificateFile="${catalina.base}/conf/localhost.crt"
               SSLCertificateKeyFile="${catalina.base}/conf/localhost.key" />

lo anterior se modifica para adaptarse a las especificaciones de su conector anteriores. Fuente: https://access.redhat.com/solutions/1232233

Solucion 2:

Tengo un caso de uso similar, que es permitir que Tomcat 7 use estrictamente solo TLSv1.2, no recurrir a protocolos SSL anteriores como TLSv1.1 o SSLv3.

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

Siguiendo esta instrucción: https://tomcat.apache.org/tomcat-7.0-doc/security-howto.html. Tomcat es relativamente sencillo de configurar el soporte SSL.

De muchas referencias probé muchas combinaciones, finalmente encontré una que obligará 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" />

dónde

keystoreFile = almacén de confianza autofirmado local

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

No usamos org.apache.coyote.http11.Http11AprProtocol, porque funciona con openssl. El openssl subyacente se replegará para admitir protocolos SSL anteriores.

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

set JAVA_HOME=C:Java64jdk1.8.0_60
set PATH=%PATH%;C:Java64jdk1.8.0_60bin
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"

Se requiere la restricción JAVA_OPTS; de lo contrario, Tomcat (que funciona con Java8) volverá a admitir protocolos SSL anteriores.

Iniciar Tomcat C:apache-tomcat-7.0.64-64bitbinstartup.bat

Podemos ver que 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 un certificado de servidor.

C:OpenSSL-Win32bin>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:.ssls3_pkt.c:362:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 0 bytes

Conecte localhost: 8443 con el protocolo TLSv1.2, Tomcat responde ServerHello con el certificado:

C:OpenSSL-Win32bin>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 solo a la solicitud TLSv1.2.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *