Nie możesz tego zrobić za pomocą keytool. Po pierwsze, w keytool
ogóle nie obsługuje DH. Po drugie, keytool
nie generuje parametrów samodzielnie dla żadnego algorytmu, tylko klucz prywatny / klucz. Po trzecie, gdy keytool
generuje parę kluczy, generuje również samopodpisany certyfikat (który czasami jest następnie zastępowany przez „prawdziwy” certyfikat wydany przez CA) i nie jest możliwe wygenerowanie samopodpisanego certyfikatu dla DH, ponieważ DH nie podpisuje. Ty mógł napisać bardzo prosty (około 10 linii) program Java do generowania parametrów DH. Ale prawdopodobnie nic ci to nie da, ponieważ:
Java i tak nie akceptuje tutaj parametrów DHE. JbossWS (serwer Jboss, później Wildfly) jest rozwidleniem Tomcat i zwykle używa implementacji Java SSL / TLS, JSSE. Począwszy od Java 7, JSSE używa własnych parametrów DHE, które są 768-bitowe, co jest niedopuszczalnie słabe. (Z wyjątkiem pakietów EXPORT, w których JSSE spełnia wymóg RFC dla DH-512, który jest całkowicie zepsuty, ale następnie pakiety EXPORT są i tak całkowicie zepsute i domyślnie wyłączone w Javie 7). Java 8 JSSE umożliwia kontrolować wielkość parametrów DHE, ale nie rzeczywistą wartość.
Twoje (niektóre nakładające się) opcje to:
Używaj Java 8. JSSE w Javie 8, ale nie wcześniej, domyślnie DHE to 1024 bity, które większość autorytetów uważa za wystarczająco silne, nawet jeśli słabahdd.org nie, i pozwala określić więcej, patrz https://docs.oracle.com /javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#customizing_dh_keys oraz w tle /programming/30352105/how-to-set-custom-dh-group-in-java -sslengine-to-prevent-logjam-attack . Należy pamiętać, że jeśli masz klientów Java przed wersją Java 8, przestaną działać, jeśli serwer użyje DHE powyżej 1024 bitów. Nie znam żadnych innych klientów, którzy mają ten problem, ale przetestuj swojego przed zatwierdzeniem tej zmiany.
Włącz ECDHE. JSSE w Javie 7 i nowszych implementuje ECDHE, które nie podlega wstępnym obliczeniom, takim jak DHE, (zwykle) przy użyciu P-256, który jest więcej niż wystarczająco silny. (Chociaż niektórzy ludzie nie ufają żadnej z krzywych NIST ECC, ponieważ NSA ma na ogół wpływ NSA, chociaż żadne znane mi oprogramowanie open source nie wykazało problemu w krzywych ECC.) Java 6 faktycznie ma część JSSE dla ECDHE ale jest włączone tylko wtedy, gdy JVM ma „dostawcę” kryptografii dla operacji podstawowych ECC, czego nie ma Java 6. bcprov - * - jdk15on z http://www.bouncycastle.org/ jest dostawcą JCE dla szeregu prymitywów kryptograficznych Java, w tym ECC, więc jeśli dodasz słoik do swojego JRE/lib/ext
i dodasz org.bouncycastle.jce.provider.BouncyCastleProvider
do listy w JRE/lib/security/java.security
(lub zrobisz odpowiedniSecurity.add/insertProvider()
gdzieś na początku kodu) Java 6 może wykonać ECDHE. Oczywiście, czy powinieneś mieć nadal używaną Javę 6, to pytanie samo w sobie.
Kilka lat temu obsługa ECDHE w przeglądarkach i innych klientach była niepewna, ale dziś AFAIK wszystkie współczesne przeglądarki obsługują ją i wolą od DHE - to znaczy, przeglądarka przywraca listę pakietów ECDHE przed pakietami DHE, więc że jeśli serwer implementuje oba, powinien wybrać ECDHE. Klienci niebędący przeglądarkami mogą nie; test, aby się upewnić.
Wyłącz DHE. Możesz skonfigurować listę szyfrów w atrybucie Łącznik, aby wykluczyć szyfry DHE; gdy jesteś przy tym, wyklucz również staticDH i staticECDH, które są bezużyteczne oraz (pojedyncze) DES i (wszystkie) „EXPORT”, jeśli są obecne (Java 6). Oznacza to, że przeglądarki i klienci, którzy nie wykonują ECHDE, utkną w zwykłym RSA i nie będą przekazywać dalej, ale przynajmniej mają „bieżącą” tajemnicę. Nie pamiętam na pewno, ale myślę, że konfiguracja złącza 5.1 była nadal w jakimś miejscu $server/deploy/jbossweb/server.xml
.
Spróbuj natywnego. Tomcat, który, jak powiedziałem od JbossWS, ma opcję implementacji HTTPS (SSL / TLS) przy użyciu „natywnej” aka „APR”, która w rzeczywistości jest w środku OpenSSL, a nie JSSE. Miałem mieszany sukces w uzyskaniu tej opcji do pracy na JbossWS i nie przypominam sobie o 5.1. Jeśli twój JbossWS ma wykonalną opcję natywną TC i jeśli może obsłużyć konfigurowanie parametrów DH, to użyj openssl do wygenerowania parametrów DH i instrukcji natywnych JbossWS, aby je skonfigurować.