cacerts - Cómo forzar al servidor Java a aceptar solo tls 1.2 y rechazar las conexiones tls 1.0 y tls 1.1
java keytool import certificate crt (3)
Tengo un servicio web https ejecutándose en Java 7. Necesito hacer cambios para que este servicio solo acepte la conexión tls1.2 y rechace ssl3, tls1.0 y tls1.1.
He agregado el siguiente parámetro java para que tls1.2 tenga la máxima prioridad.
-Dhttps.protocols=TLSv1.2
pero también acepta las conexiones tls1.0 de clientes java. si el cliente también se ejecuta con el parámetro java anterior, la conexión es tls1.2 pero si el cliente se ejecuta sin este parámetro, las conexiones son tls1.0.
Jugué un poco con el archivo java.security en la carpeta jdk / jre / lib / security.
Actualmente tengo los siguientes algoritmos deshabilitados:
jdk.certpath.disabledAlgorithms= MD2, MD4, MD5, SHA224, DSA, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224
jdk.tls.disabledAlgorithms=DSA, DHE, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224
Estoy usando java 7, actualización 79. No estoy inclinado a interceptar cada conexión y verificar la versión de tls.
El certificado de mi servidor es de 2048 bits generado con MD5 con algoritmo RSA.
Si la lista de algoritmos deshabilitados tiene RSA en lugar de RSA keySize <2048, obtengo SSLHandShakeError con mensaje de error: no hay conjuntos de cifrado en común.
Mi programa de prueba ejecuta el servidor http desde la siguiente URL: http://www.herongyang.com/JDK/HTTPS-HttpsEchoer-Better-HTTPS-Server.html
ayuda a hacer que java acepte solo conexiones tls 1.2.
Encontré una solución para esto. Pongo el
jdk.tls.disabledAlgorithms= SSLv2Hello, SSLv3, TLSv1, TLSv1.1
en el archivo jre / lib / security / java.security en el servidor.
Después de configurar esto, el servidor solo acepta la conexión TLS1.2 y rechaza las versiones de protocolo de seguridad inferiores.
Solo un pequeño comentario;
En la pregunta, declaró que generó un certificado de tamaño 2048 con MD5. Pero en la ruta del certificado, desactivó MD5, por lo que esto normalmente no debería funcionar. En segundo lugar, los certificados de servidor generados con un hash MD5 están prohibidos en los navegadores modernos como Internet Explorer 10 / Edge.
Me gustaría aconsejarle que genere su certificado de Servidor al menos con un SHA256 o <hash.
También hice los mismos cambios en el archivo "/java/jdk1.7.0_79/jre/lib/security"-java.security, pero algunos clientes todavía pueden llamar a mis servicios con el protocolo SSL.
---- Cambios jdk.tls.disabledAlgorithms = SSL, SSLv2, SSLv3, TLSv1, TLSv1.1, MD5, SSLv3, DSA, RSA keySize <2048