Você não pode fazer isso com o keytool. Primeiro, keytool
não suporta DH. Segundo, keytool
não gera parâmetros por si só para qualquer algoritmo, apenas uma chave privada / par de chaves. Terceiro, quando keytool
gera um par de chaves, também gera um certificado autoassinado (que às vezes é substituído por um certificado "real" emitido pela CA) e é impossível gerar um certificado autoassinado para o DH porque o DH não assina. Você pode escrever um programa Java muito simples (cerca de 10 linhas) para gerar parâmetros DH. Mas provavelmente não faria nenhum bem porque:
Java não aceita parâmetros DHE aqui de qualquer maneira. O JbossWS (o servidor da web Jboss, mais tarde Wildfly) é um fork do Tomcat e normalmente usa a implementação Java do SSL / TLS, JSSE. Até o Java 7, o JSSE usa seus próprios parâmetros DHE de 768 bits, que são inaceitavelmente fracos. (Exceto nos conjuntos EXPORT em que o JSSE obedece ao requisito RFC para o DH-512, que é totalmente interrompido, mas os conjuntos EXPORT são totalmente projetados de qualquer maneira e são desativados por padrão no Java 7 em diante.) O Java 8 JSSE permite que você controla o tamanho dos parâmetros DHE, mas não o valor real.
Suas opções (algumas sobrepostas) são:
Use o Java 8. JSSE no Java 8, mas não antes, o DHE tem como padrão 1024 bits, que a maioria das autoridades considera fortes o suficiente, apesar de o fracodh.org não, e permite que você especifique mais, consulte https://docs.oracle.com /javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#customizing_dh_keys e para o plano de fundo /programming/30352105/how-to-set-custom-dh-group-in-java -sslengine-to-prevent-logjam-attack . Observe que se você tiver algum cliente Java antes do Java 8, eles falharão se o servidor usar DHE acima de 1024 bits. Não conheço outros clientes que tenham esse problema, mas teste o seu antes de se comprometer com essa alteração.
Ative o ECDHE. O JSSE no Java 7 e posterior implementa o ECDHE, que não está sujeito a pré-computação como DHE, (normalmente) usando o P-256, que é mais do que forte o suficiente. (Embora algumas pessoas não confiem em nenhuma das curvas NIST ECC porque o NIST em geral é influenciado pela NSA, embora nenhum código aberto que eu conheça tenha mostrado um problema especificamente nas curvas ECC.) Java 6 realmente tem a parte JSSE para ECDHE mas só será ativado se a JVM tiver um "provedor" criptográfico para primitivas ECC, o que o Java 6 não possui. bcprov - * - jdk15on de http://www.bouncycastle.org/ é um provedor JCE para uma variedade de primitivas criptográficas Java, incluindo ECC, portanto, se você adicionar o jar ao seu JRE/lib/ext
e adicionar org.bouncycastle.jce.provider.BouncyCastleProvider
à lista em JRE/lib/security/java.security
(ou faça umaSecurity.add/insertProvider()
em algum lugar no início do seu código) Java 6 pode executar ECDHE. É claro que você deve ter o Java 6 ainda em uso é uma questão por si só.
Há alguns anos, o suporte ao ECDHE em navegadores e outros clientes era duvidoso, mas hoje o AFAIK todos os navegadores atualizados o suportam e o preferem ao DHE - ou seja, o hello navegador lista os pacotes ECDHE antes dos pacotes DHE, portanto que, se o servidor implementar os dois, deverá escolher ECDHE. Clientes que não são navegadores talvez não; teste para ter certeza.
Desative o DHE. Você pode configurar a lista de cifras no atributo Connector para excluir cifras DHE; enquanto você estiver nisso, também exclua staticDH e staticECDH, que são inúteis, e (único) DES e (todos) "EXPORT", se presentes (Java 6). Isso significa que navegadores e clientes que não fazem ECHDE ficarão presos ao RSA comum e sem Forward Secrecy, mas pelo menos eles têm sigilo "atual". Não me lembro com certeza, mas acho que a configuração do 5.1 Connector ainda estava em algum lugar $server/deploy/jbossweb/server.xml
.
Tente nativo. O Tomcat, do qual eu disse que o JbossWS começou, tem uma opção para implementar HTTPS (SSL / TLS) usando "nativo" ou "APR", que na verdade é OpenSSL dentro do JSSE. Eu tive um sucesso misto em fazer com que essa opção funcionasse no JbossWS e não me lembro do 5.1. Se o seu JbossWS tiver uma opção nativa do TC viável e se puder lidar com a configuração de parâmetros DH, use o openssl para gerar os parâmetros DH e as instruções nativas do JbossWS para configurá-los.