Heute haben wir einem Kunden geholfen, mit seiner Java 1.6-basierten Applikation auf einen unserer Web Services zuzugreifen.

Auf der Seite des Kunden erschien folgende Fehlermeldung:

-1 Fatal transport error: java.lang.RuntimeException: Could not generate DH keypair: undefined

Da weder ein Update der Java Version, noch eine Änderung des Programmcodes oder der Java Installation in Frage kam, haben wir nach einiger Recherche, vor allem auf http://stackoverflow.com/questions/32230342/getting-could-not-generate-dh-keypair-exception und http://stackoverflow.com/questions/6851461/java-why-does-ssl-handshake-give-could-not-generate-dh-keypair-exception/33712120#33712120, sowie insbesondere http://serverfault.com/questions/693241/how-to-fix-logjam-vulnerability-in-apache-httpd/693244#693244 das Problem serverseitig gelöst.

Eine Antwort in letzterem Beitrag schlägt vor, zunächst eine eigene DH Parameter Datei zu generieren:

# openssl dhparam -out dhparam.pem 1024

Diese wird an das SSL-Zertifikat angehängt:

# cat dhparam.pem >> mycert.crt

Hierbei sollte mit Hilfe eines Editors sichergestellt werden, dass zwischen dem eigentlichen Zertifikat und dem DH-Teil (erkennbar durch den Einschluss in —–BEGIN DH PARAMETERS—– bzw. —–END DH PARAMETERS—–) ein Zeilenumbruch erfolgt.

In unserem Fall funktionierte die Lösung einwandfrei: Nach einem Restart des Webservers konnte die Java 1.6 Applikation des Kunden problemlos auf unsere Web Services zugreifen.