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, ele também gera um certificado auto-assinado (que às vezes é subsequentemente substituído por um certificado "real" emitido por CA) e é impossível gerar um certificado autoassinado para DH porque o DH não assina. Você poderia escrever um programa Java muito simples (cerca de 10 linhas) para gerar parâmetros DH. Mas provavelmente não faria bem a você porque:
O Java não aceita parâmetros DHE aqui mesmo. O JbossWS (o servidor Jboss, depois Wildfly) é um fork do Tomcat e normalmente usa a implementação Java de SSL / TLS, JSSE. Através do Java 7, o JSSE usa seus próprios parâmetros DHE, que são de 768 bits, o que é inaceitavelmente fraco. (Exceto para as suítes EXPORT onde o JSSE obedece ao requisito RFC para o DH-512, que é totalmente quebrado, mas os conjuntos EXPORT são por design totalmente quebrados de qualquer maneira e desativados por padrão no Java 7.) O Java 8 JSSE permite que você controlar o tamanho dos parâmetros DHE, mas não o valor real.
Suas opções (algumas sobrepostas) são:
Use Java 8. JSSE no Java 8, mas não antes, padrão DHE para 1024 bits, que a maioria das autoridades considera strong o suficiente mesmo que weakdh.org não, e permite que você especifique mais, consulte link e para o plano de fundo link . Observe que, se você tiver quaisquer clientes Java antes do Java 8, eles falharão se o servidor utilizar DHE acima de 1024 bits. Não conheço nenhum outro cliente que tenha 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 o DHE (normalmente) usando o P-256, que é mais do que suficiente. (Embora algumas pessoas não confiem nenhuma das curvas NIST ECC, porque o NIST, em geral, é influenciado pela NSA, embora nenhuma fonte aberta que conheça tenha mostrado um problema específico nas curvas ECC.) Java 6 na verdade tem a parte JSSE para o ECDHE, mas ela só é ativada se a JVM tiver um "provedor" de criptografia para primitivos ECC, o que o Java 6 não possui. O bcprov - * - jdk15on do link é um provedor JCE para uma variedade de primitivos criptográficos Java, incluindo ECC, portanto, se você adicionar o jar ao seu JRE/lib/ext
e adicione org.bouncycastle.jce.provider.BouncyCastleProvider
à lista em JRE/lib/security/java.security
(ou faça um Security.add/insertProvider()
adequado em algum lugar no início do seu código) O Java 6 pode fazer o ECDHE. Claro, se você deveria ter algum Java 6 ainda em uso, é uma questão por si só.
Há alguns anos, o suporte para o ECDHE em navegadores e outros clientes era duvidoso, mas hoje em dia todos os navegadores atuais da AFAIK o suportam e o preferem ao DHE - ou seja, o navegador ola lista os pacotes ECDHE antes dos conjuntos DHE para que, se o servidor implementar ambos, escolha ECDHE. Clientes não-navegadores talvez não; teste para ter certeza.
Desative o DHE. Você pode configurar a lista de cifras no atributo Conector para excluir as cifras DHE; enquanto você está nisso, também exclui staticDH e staticECDH que são inúteis e (single) DES e (all) "EXPORT" se presente (Java 6). Isso significa que os navegadores e clientes que não fazem o ECHDE ficarão presos com o RSA simples e sem o Forward Scripting, mas pelo menos terão sigilo "atual". Não me lembro com certeza, mas acho que a configuração do 5.1 Connector ainda estava em algum lugar como $server/deploy/jbossweb/server.xml
.
Tente nativo. Tomcat, que como eu disse que o JbossWS começou, tem uma opção para implementar HTTPS (SSL / TLS) usando "nativo" aka "APR" que na verdade é OpenSSL em vez de JSSE . Tive muito sucesso ao obter essa opção para trabalhar no JbossWS e não me lembro de 5.1. Se seu JbossWS tiver uma opção nativa de TC trabalhável, e se puder manipular a configuração dos parâmetros DH, use openssl para gerar os parâmetros DH e as instruções nativas do JbossWS para configurar eles.