¿Cómo habilitar la comunicación saliente TLSv1.1 + desde la aplicación web en Win10 / Tomcat7 / Java7?
Lo siento si mi pregunta parece redundante. Encontré toneladas de preguntas y respuestas en stackoverflow y muchos otros recursos sobre cómo habilitar TLSv1.1 + para Tomcat, para clientes Java, para sistemas operativos ..., pero aún no puedo habilitarlo en mi entorno local en Win10 / Tomcat7 / Java7 . Probablemente, solo estoy haciendo algo mal.
Entonces, para ser claros, tengo una aplicación web Java implementada en Tomcat. Esta aplicación web realiza solicitudes a servicios remotos a través de https. Anteriormente, estos servicios remotos admitían TLSv1.0 y mi aplicación funcionaba bien. Ahora estos servicios remotos solo admiten TLSv1.1 +, y recibo un error / en realidad una respuesta simple de la página html que dice:
To access this website, update your web browser or upgrade your operating system to support TLSv1.1 or TLSv1.2
Intenté habilitar el soporte de comunicación saliente TLSv1.1 + para mi aplicación web de varias maneras, pero aún así no funciona. Entonces, intenté:
set CATALINA_OPTS=-Dhttps.protocols=TLSv1.1,TLSv1.2
set CATALINA_OPTS=-Ddeployment.security.TLSv1.1=true -Ddeployment.security.TLSv1.2=true
Y lo mismo paraJAVA_OPTS
. Lo intenté agregando variables de entorno del sistema y simplemente configurando cmd antes de iniciar tomcat. Además, configuré la compatibilidad con TLSv1.1 y TLSv1.2 en la pestaña Avanzada Panel de control \ Programas \ Panel de control de Java.
Aquí hay detalles sobre mi env:
Versión de Windows:
Microsoft Windows [Version 10.0.14393]
Registro de inicio de Tomcat (primeras n líneas):
c:\Program Files\apache-tomcat-7.0.72\bin>catalina.bat run
Using CATALINA_BASE: "C:\Program Files\apache-tomcat-7.0.72"
Using CATALINA_HOME: "C:\Program Files\apache-tomcat-7.0.72"
Using CATALINA_TMPDIR: "C:\Program Files\apache-tomcat-7.0.72\temp"
Using CATALINA_OPTS: "-Dhttps.protocols=TLSv1.1,TLSv1.2 -Xms1024m -Xmx2048m -XX:MaxPermSize=256m"
Using JRE_HOME: "C:\Program Files\Java\jdk1.7.0_80\jre"
Using CLASSPATH: "C:\Program Files\apache-tomcat-7.0.72\bin\bootstrap.jar;C:\Program Files\apache-tomcat-7.0.72\bin\tomcat-juli.jar"
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version: Apache Tomcat/7.0.72
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built: Sep 14 2016 12:12:26 UTC
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number: 7.0.72.0
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name: Windows 8.1
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version: 6.3
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture: amd64
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home: C:\Program Files\Java\jdk1.7.0_80\jre
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version: 1.7.0_80-b15
Jan 12, 2017 3:40:54 PM org.apache.catalina.startup.VersionLoggerListener log
...
No puedo entender lo que estoy haciendo mal.
ACTUALIZADO:
Si cambio JRE_HOME para tomcat a JAVA 8, funciona bien
Por ahora lo arreglé agregando este código para configurar apache HttpClient:
SSLContext sslContext = null;
try {
sslContext = SSLContexts.custom().useTLS().build();
} catch (KeyManagementException | NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
SSLConnectionSocketFactory f = new SSLConnectionSocketFactory(sslContext, new String[] { "TLSv1.1", "TLSv1.2" }, null,
new AllowAllHostnameVerifier());
httpclient = HttpClients.custom().setSSLSocketFactory(f).build();
Pero, ¿aún no se puede hacer sin modificaciones de código? ¿Configurando tomcat java o system de alguna manera? Porque con JAVA 8 todo funciona sin modificaciones de código.