Mit Keytool geht das nicht. Erstens keytool
unterstützt DH überhaupt nicht. Zweitens werden keytool
für keinen Algorithmus selbst Parameter generiert , sondern nur ein privater Schlüssel / ein Schlüsselpaar. Drittens wird beim keytool
Generieren eines Schlüsselpaares auch ein selbstsigniertes Zertifikat generiert (das manchmal später durch ein "echtes" CA-ausgestelltes Zertifikat ersetzt wird), und es ist unmöglich, ein selbstsigniertes Zertifikat für DH zu generieren, da DH nicht signiert. Sie könnten ein sehr einfaches Java-Programm (ca. 10 Zeilen) schreiben, um DH-Parameter zu generieren. Aber es würde dir wahrscheinlich nichts nützen, weil:
Java akzeptiert hier sowieso keine DHE-Parameter. JbossWS (der Jboss-Webserver, später Wildfly) ist eine Abzweigung von Tomcat und verwendet normalerweise die Java-Implementierung von SSL / TLS, JSSE. Bis Java 7 verwendet JSSE seine eigenen DHE-Parameter, die 768-Bit sind und unannehmbar schwach sind. (Mit Ausnahme der EXPORT-Suiten, in denen JSSE die RFC-Anforderungen für DH-512 erfüllt, die völlig fehlerhaft sind, die EXPORT-Suiten jedoch ohnehin völlig fehlerhaft sind und in Java 7 standardmäßig deaktiviert sind.) Java 8 JSSE ermöglicht dies Steuern Sie die Größe der DHE-Parameter, jedoch nicht den tatsächlichen Wert.
Ihre (einige überlappende) Optionen sind:
Verwenden Sie Java 8. JSSE in Java 8, jedoch nicht früher, setzt DHE standardmäßig auf 1024 Bit, was die meisten Behörden als stark genug betrachten, obwohl dies bei schwachdh.org nicht der Fall ist, und ermöglicht es Ihnen, weitere Angaben zu machen (siehe https://docs.oracle.com) /javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#customizing_dh_keys und für den Hintergrund /programming/30352105/how-to-set-custom-dh-group-in-java -sslengine-to-verhindern-logjam-Angriff . Beachten Sie, dass Java- Clients vor Java 8 fehlschlagen, wenn der Server DHE über 1024 Bit verwendet. Ich kenne keine anderen Kunden, die dieses Problem haben, aber testen Sie Ihre, bevor Sie sich zu dieser Änderung verpflichten.
Aktivieren Sie ECDHE. JSSE in Java 7 und höher implementiert ECDHE, für das keine Vorberechnung wie DHE erforderlich ist, (normalerweise) mit P-256, das mehr als stark genug ist. (Obwohl einige Leute keiner der NIST-ECC-Kurven vertrauen, weil NIST im Allgemeinen von NSA beeinflusst wird, obwohl kein mir bekanntes Open Source ein Problem in den ECC-Kurven speziell gezeigt hat.) Java 6 hat tatsächlich den JSSE-Teil für ECDHE Es ist jedoch nur aktiviert, wenn die JVM einen Krypto "Provider" für ECC-Grundelemente hat, was Java 6 nicht tut. bcprov - * - jdk15on von http://www.bouncycastle.org/ ist ein JCE-Anbieter für eine Reihe von Java-Krypto- Grundelementen, einschließlich ECC. Wenn Sie also das Glas zu Ihrem JRE/lib/ext
hinzufügen org.bouncycastle.jce.provider.BouncyCastleProvider
und zur Liste hinzufügen JRE/lib/security/java.security
(oder eine geeignete Option ausführen)Security.add/insertProvider()
irgendwo früh in Ihrem Code) Java 6 kann ECDHE ausführen. Ob Sie Java 6 noch verwenden sollten, ist natürlich eine Frage für sich.
Vor ein paar Jahren war die Unterstützung für ECDHE in Browsern und anderen Clients zweifelhaft, aber heute unterstützen AFAIK alle aktuellen Browser dies und ziehen es DHE vor - das heißt, der Browser listet die ECDHE-Suiten vor den DHE-Suiten auf Wenn der Server beide implementiert, sollte er ECDHE wählen. Nicht-Browser-Clients möglicherweise nicht; Test, um sicher zu sein.
Deaktivieren Sie DHE. Sie können die Liste der Chiffren im Connector-Attribut so konfigurieren, dass DHE-Chiffren ausgeschlossen werden. Wenn Sie gerade dabei sind, schließen Sie auch staticDH und staticECDH aus, die unbrauchbar sind, sowie (einzelnes) DES und (alle) "EXPORT", falls vorhanden (Java 6). Dies bedeutet, dass Browser und Clients, die ECHDE nicht ausführen, mit einfachem RSA und ohne Weiterleitungsgeheimnis nicht weiterkommen, aber zumindest "aktuelle" Geheimhaltung haben. Ich erinnere mich nicht sicher, aber ich denke, 5.1 Connector Konfiguration war immer noch irgendwo wie $server/deploy/jbossweb/server.xml
.
Versuchen Sie es mit Native. Tomcat, von dem aus JbossWS gestartet ist, hat die Option, HTTPS (SSL / TLS) mithilfe von "nativ" oder "APR" zu implementieren, bei dem es sich tatsächlich um OpenSSL innerhalb von JSSE handelt. Ich hatte gemischte Erfolge damit, diese Option für JbossWS zum Laufen zu bringen, und erinnere mich nicht an 5.1. Wenn Ihr JBossWS hat eine tragfähige TC-native Option, und wenn es DH Parameter Konfiguration umgehen kann, dann OpenSSL verwenden , um die DH - Parameter und die JBossWS-native Anweisungen zu erzeugen , um sie zu konfigurieren.