Non puoi farlo con keytool. Innanzitutto, keytool
non supporta affatto DH. Secondo, keytool
non genera parametri da solo per nessun algoritmo, ma solo una chiave privata / coppia di chiavi. Terzo, quando keytool
genera una coppia di chiavi genera anche un certificato autofirmato (che a volte viene successivamente sostituito da un certificato "reale" emesso dalla CA) ed è impossibile generare un certificato autofirmato per DH perché DH non firma. È possibile scrivere un programma Java molto semplice (circa 10 righe) per generare parametri DH. Ma probabilmente non ti farebbe nulla di buono perché:
Java non accetta comunque i parametri DHE qui. JbossWS (il webserver Jboss, in seguito Wildfly) è un fork di Tomcat e normalmente utilizza l'implementazione Java di SSL / TLS, JSSE. Fino a Java 7, JSSE utilizza i propri parametri DHE che sono 768 bit, inaccettabilmente deboli. (Ad eccezione delle suite EXPORT in cui JSSE obbedisce ai requisiti RFC per DH-512, che è totalmente rotto, ma le suite EXPORT sono comunque progettate completamente rotte e disabilitate di default in Java 7 e versioni successive. Java 8 JSSE consente di controlla la dimensione dei parametri DHE, ma non il valore effettivo.
Le opzioni (alcune sovrapposte) sono:
Usa Java 8. JSSE in Java 8, ma non in precedenza, per impostazione predefinita DHE su 1024 bit, che la maggior parte delle autorità considera abbastanza forte anche se deboledh.org non lo fa e ti consente di specificare altro, vedi https://docs.oracle.com /javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#customizing_dh_keys e per lo sfondo /programming/30352105/how-to-set-custom-dh-group-in-java -sslengine-to-prevent-logjam-attack . Si noti che se si dispone di client Java prima di Java 8, falliranno se il server utilizza DHE oltre 1024 bit. Non conosco altri clienti che hanno questo problema, ma testalo prima di impegnarti in questa modifica.
Abilita ECDHE. JSSE in Java 7 e versioni successive implementa ECDHE, che non è soggetto a precomputazione come DHE, (normalmente) usando P-256, che è più che abbastanza forte. (Anche se alcune persone non si fidano di nessuna delle curve ECC del NIST perché il NIST in generale è influenzato dall'NSA, anche se nessun open source che conosco ha mostrato un problema specifico nelle curve ECC.) Java 6 ha effettivamente la parte JSSE per ECDHE ma è abilitato solo se JVM ha un "provider" crittografico per primitive ECC, che Java 6 non ha. bcprov - * - jdk15on da http://www.bouncycastle.org/ è un fornitore JCE per una gamma di primitive crittografiche Java incluso ECC, quindi se aggiungi il jar al tuo JRE/lib/ext
e aggiungi org.bouncycastle.jce.provider.BouncyCastleProvider
all'elenco in JRE/lib/security/java.security
(o fai un adattoSecurity.add/insertProvider()
da qualche parte all'inizio del codice) Java 6 può eseguire ECDHE. Ovviamente se dovresti avere ancora Java 6 in uso è una domanda a sé stante.
Qualche anno fa, il supporto per ECDHE nei browser e altri client era incerto, ma oggi AFAIK tutti i browser aggiornati lo supportano e lo preferiscono a DHE, ovvero il ciao del browser elenca le suite ECDHE prima delle suite DHE, quindi che se il server implementa entrambi dovrebbe scegliere ECDHE. Forse i client non browser; prova per essere certi.
Disabilita DHE. È possibile configurare l'elenco di cifre nell'attributo Connector per escludere le cifre DHE; mentre ci sei, escludi anche staticDH e staticECDH che sono inutili, e (singolo) DES e (tutto) "EXPORT" se presente (Java 6). Ciò significa che i browser e i client che non eseguono ECHDE saranno bloccati con semplice RSA e senza segretezza diretta, ma almeno hanno un segreto "attuale". Non ricordo per certo, ma penso che la configurazione del connettore 5.1 fosse ancora da qualche parte $server/deploy/jbossweb/server.xml
.
Prova nativo. Tomcat, che come ho detto da JbossWS è partito, ha un'opzione per implementare HTTPS (SSL / TLS) usando "native" aka "APR" che in realtà è OpenSSL all'interno piuttosto che JSSE. Ho avuto un successo misto nel far funzionare questa opzione su JbossWS e non ricordo di 5.1. Se il tuo JbossWS ha un'opzione nativa TC realizzabile e se è in grado di gestire la configurazione dei parametri DH, usa opensl per generare i parametri DH e le istruzioni native JbossWS per configurarli.