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.