2014-04-29 04:57:20 +0000 2014-04-29 04:57:20 +0000
50
50

Habilitar TLS 1.1 y 1.2 para clientes en Java 7

Java 7 deshabilita TLS 1.1 y 1.2 para clientes. De Arquitectura de Criptografía Java Documentación de Proveedores de Oracle :

Aunque SunJSSE en la versión de Java SE 7 soporta TLS 1.1 y TLS 1.2, ninguna de las dos versiones está habilitada por defecto para las conexiones de clientes. Algunos servidores no implementan correctamente la compatibilidad de reenvío y se niegan a hablar con clientes TLS 1.1 o TLS 1.2. Para la interoperabilidad, SunJSSE no habilita TLS 1.1 o TLS 1.2 de forma predeterminada para las conexiones de clientes.

Estoy interesado en habilitar los protocolos en una configuración de todo el sistema (tal vez a través de un archivo de configuración), y no en una solución para cada aplicación de Java.

¿Cómo puedo habilitar administrativamente TLS 1.1 y 1.2 system wide?

Nota : desde POODLE, me gustaría deshabilitar administrativamente SSLv3 system wide. (Los problemas con SSLv3 son anteriores a POODLE por lo menos 15 años, pero Java/Oracle/Developers no respetaron las mejores prácticas básicas, así que los usuarios como tú y yo nos quedamos con la limpieza del desorden).


Aquí está la versión de Java:

$ /Library/Java/JavaVirtualMachines/jdk1.7.0_07.jdk/Contents/Home/bin/java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)

Respuestas (6)

31
31
31
2015-06-16 08:08:06 +0000

Podrías añadir la siguiente propiedad -Dhttps.protocols=TLSv1.1,TLSv1.2 que configura la JVM para especificar qué versión del protocolo TLS debe usarse durante las conexiones https.

14
14
14
2014-06-18 16:09:55 +0000

Podrías intentar añadir algo como lo siguiente a tu script de inicio, asumiendo que Java 1.7:

JAVACMD="$JAVACMD -Ddeployment.security.SSLv2Hello=false -Ddeployment.security.SSLv3=false -Ddeployment.security.TLSv1=false -D\ deployment.security.TLSv1.1=true -Ddeployment.security.TLSv1.2=true"

Algunas otras sugerencias: https://blogs.oracle.com/java-platform-group/entry/java_8_will\Nusuario de los tls

9
9
9
2014-04-29 08:46:24 +0000

Para Java 7 en Mac OS X, vas a System Preferences > Java, y el panel de control de Java se abre en una ventana separada. Luego vas a la pestaña Advanced y te desplazas hacia abajo a la sección Advanced Security Settings y marcas las casillas Use TLS 1.1 y Use TLS 1.2.

8
8
8
2014-11-05 13:12:56 +0000

Recientemente investigué esto y quiero agregar - esto no funcionará para el JDK, las propiedades deployment.properties sólo relevantes para Applets y otras cosas que se ejecutan en el JRE.

para aplicaciones JDK (un servidor que necesita conectarse a LDAP por ejemplo) el servidor es un cliente pero el deployment.security. no funcionaría.

no hay forma de cambiarlo a menos que escribas algún código como SSLContext.getInstance(“TLSv1.2”);

4
4
4
2015-06-18 17:42:31 +0000

Parece que la configuración de deployment.security funciona para los programas Java Applets y Java Web Start que se ejecutan en un escritorio. Como otros mencionan aquí, puedes editar deployment.properties para especificar eso.

Aquí hay un artículo que muestra cómo usar una política de grupo para desplegar el mismo archivo deployment.properties para todos los usuarios: http://www.darkoperator.com/blog/2013/1/12/pushing-security-configuration-for-java-7-update-10-via-gpo.html

Desafortunadamente no hay forma de activar esto para todos los programas de java en un ordenador que llaman directamente java.exe o javaw.exe. Hay que encontrar cada programa que usa java, encontrar el archivo de configuración donde se especifican los parámetros a pasar a java y cambiarlo.

En el caso de Tomcat tuvimos que pasar esto para que las conexiones de Tomcat a otros servidores usen TLS 1.1+: -Dhttps.protocols=TLSv1.1,TLSv1.2. En Linux esto se puede hacer editando bin/catalina.sh o creando bin/setenv.sh.

No sé qué hace falta para que Tomcat use sólo TLS 1.2 en el lado del servidor. Nos enfrentamos con Apache HTTP.

1
1
1
2018-07-04 15:02:10 +0000

Si estás atascado con Java 7, puedes añadir -Djdk.tls.client.protocols=TLSv1.1,TLSv1.2 a los argumentos de la JVM.

Ten en cuenta que esto tiene varias advertencias:

A pesar de estas deficiencias, creo que esto podría ser útil, sobre todo cuando el protocolo en el que uno está interesado utiliza TLS pero no es HTTPS, por ejemplo LDAPS.

[ACTUALIZACIÓN] En mi empresa, que ejecuta su conjunto de servidores en Ubuntu, nos hemos dado cuenta de que incluso la actualización 121 de OpenJDK 7 no era suficiente para implementar esto correctamente. Hemos actualizado todos los servidores para actualizar 181 antes de que funcionara.