No puedes hacer eso con keytool. Primero, keytool
no es compatible con DH en absoluto. En segundo lugar, keytool
no genera parámetros por sí mismos para ningún algoritmo, solo una clave privada / par de claves. En tercer lugar, cuando keytool
genera un par de claves, también genera un certificado autofirmado (que a veces se reemplaza posteriormente por un certificado "real" emitido por CA) y es imposible generar un certificado autofirmado para DH porque DH no firma. Usted podría escribir una (aproximadamente 10 líneas) muy simple programa Java para generar parámetros de DH. Pero probablemente no te haría ningún bien porque:
Java no acepta los parámetros DHE aquí de todos modos. JbossWS (el servidor web Jboss, más tarde Wildfly) es una bifurcación de Tomcat, y normalmente utiliza la implementación Java de SSL / TLS, JSSE. Hasta Java 7, JSSE usa sus propios parámetros DHE que son de 768 bits, lo cual es inaceptablemente débil. (Excepto para las suites EXPORT donde JSSE obedece el requisito de RFC para DH-512, que está totalmente roto, pero las suites EXPORT están, por diseño, totalmente rotas de todos modos, y están deshabilitadas por defecto en Java 7 en adelante.) Java 8 JSSE le permite controla el tamaño de los parámetros DHE, pero no el valor real.
Sus opciones (algunas superpuestas) son:
Use Java 8. JSSE en Java 8, pero no antes, el valor predeterminado es DHE a 1024 bits, que la mayoría de las autoridades consideran lo suficientemente fuerte, aunque débildh.org no lo hace, y le permite especificar más, consulte https://docs.oracle.com /javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#customizing_dh_keys y para antecedentes /programming/30352105/how-to-set-custom-dh-group-in-java -sslengine-to-prevent-logjam-attack . Tenga en cuenta que si tiene clientes Java anteriores a Java 8, fallarán si el servidor usa DHE de más de 1024 bits. No conozco ningún otro cliente que tenga este problema, pero pruebe el suyo antes de comprometerse con este cambio.
Habilitar ECDHE. JSSE en Java 7 y posterior implementa ECDHE, que no está sujeto a una precomputación como DHE, (normalmente) usando P-256, que es lo suficientemente fuerte. (Aunque algunas personas no confían en ninguna de las curvas NIST ECC porque NIST en general está influenciado por NSA, aunque ninguna fuente abierta que conozco ha mostrado un problema específicamente en las curvas ECC). Java 6 en realidad tiene la parte JSSE para ECDHE pero solo está habilitado si la JVM tiene un "proveedor" criptográfico para primitivas ECC, que Java 6 no tiene. bcprov - * - jdk15on de http://www.bouncycastle.org/ es un proveedor de JCE para una variedad de primitivas criptográficas Java, incluido ECC, por lo que si agrega el jar a su JRE/lib/ext
y agrega org.bouncycastle.jce.provider.BouncyCastleProvider
a la lista JRE/lib/security/java.security
(o haga unSecurity.add/insertProvider()
en algún lugar temprano en su código) Java 6 puede hacer ECDHE. Por supuesto, si debe tener Java 6 todavía en uso, es una pregunta en sí mismo.
Hace unos años, el soporte para ECDHE en los navegadores y otros clientes era dudoso, pero hoy AFAIK todos los navegadores actualizados lo admiten y lo prefieren a DHE, es decir, el navegador hola enumera las suites ECDHE antes que las suites DHE, por lo que que si el servidor implementa ambos debe elegir ECDHE. Los clientes que no son del navegador tal vez no; prueba para estar seguro.
Deshabilitar DHE. Puede configurar la lista de cifrados en el atributo Conector para excluir los cifrados DHE; mientras lo hace, también excluye staticDH y staticECDH que son inútiles, y (solo) DES y (todos) "EXPORTAR" si están presentes (Java 6). Esto significa que los navegadores y los clientes que no hacen ECHDE se quedarán con RSA simple y sin secreto de reenvío, pero al menos tienen secreto "actual". No recuerdo con certeza, pero creo que la configuración del conector 5.1 todavía estaba en algún lugar $server/deploy/jbossweb/server.xml
.
Prueba nativo. Tomcat, que como dije JbossWS comenzó, tiene una opción para implementar HTTPS (SSL / TLS) usando "nativo", también conocido como "APR", que en realidad es OpenSSL en lugar de JSSE. He tenido un éxito mixto al hacer que esta opción funcione en JbossWS, y no recuerdo sobre 5.1. Si su JbossWS tiene una opción nativa de TC viable, y si puede manejar la configuración de parámetros DH, use openssl para generar los parámetros DH y las instrucciones nativas de JbossWS para configurarlos.