SSL Handshake Failure bei Java Clients

Am 2. Juni wurde mit den Ubuntu Sicherheits Updates ein Update für den Apache2 Webserver ausgeliefert das unter anderem dafür sorgt das unsichere “Export Cipher Suites” per default deaktiviert sind. Das sorgt dafür das Java Clients die Java Version 7 oder früher benutzen keine Verbindung zu einem mit SSL gesicherten Webserver aufbauen können.

Siehe Ubuntu Sicherheitsupdate USN-2625-1
Siehe Apache mod_ssl FAQ

Java Clients werfen dann eine Exception wie

java.lang.RuntimeException: Could not generate DH keypair

oder

java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)

Was Export Cipher Suites sind

Die im Update deaktivierte Sammlung gemeinhin bezeichnet als Export Cipher Suites sind Verschlüsselungsmethoden welche aus heutigen Sicherheitsstandards als schwach angesehen werden müssen. Ein Gesetz verpflichtete US Unternehmen eine ganze Zeit dazu keine stärkeren Verschlüsselungen in ihre Softwareprodukte als diese von der Regierung ausgewählten einzubauen. Dies sollte sicherstellen, dass Software die ins Ausland verkauft wird keine Kommunikation abwickeln kann die nicht von den US Geheimdiensten geknackt werden kann. Diese Regelung gilt inzwischen nichtmehr, es bleibt aber genügend alte Software die dieser Regelung noch unterliegt.

Temporäre Lösung damit es wieder läuft

Mittelfristig sollte man sich natürlich darum kümmern das die Java Software eine zeitgemäße Verschlüsselungsmethode unterstützt und verwendet, damit es erstmal wieder läuft, kann man die Unterstützung für Export Cipher Suites temporär wieder herstellen. Das geht am einfachsten wenn man die folgenden Zeilen an das Ende der SSL Zertifikate (NICHT Key) anhängt und den Apache2 Webserver durchstartet.

-----BEGIN DH PARAMETERS-----
MIGHAoGBAP//////////yQ/aoiFowjTExmKLgNwc0SkCTgiKZ8x0Agu+pjsTmyJR
Sgh5jjQE3e+VGbPNOkMbMCsKbfJfFDdP4TVtbVHCReSFtXZiXn7G9ExC6aY37WsL
/1y29Aa37e44a/taiZ+lrp8kEXxLH+ZJKGZR7OZTgf//////////AgEC
-----END DH PARAMETERS-----

Den Pfad zum Zertifikat kann man mit dem folgenden Befehl ermitteln

cat /etc/apache2/sites-enabled/* | grep SSLCertificateFile

Echte Lösung des Problems

Mittelfristig kommt man nicht umher das Java Programm eine stärkere Verschlüsselungsmethode verwenden zu lassen. Um dies zu erreichen gibt es zwei Möglichkeiten.

Die erste Lösung ist das Programm mit Java 8 oder neuer zu kompilieren und laufen zu lassen. Java 8 unterliegt nichtmehr den ursprünglichen Restriktionen und unterstützt auch stärkere Verschlüsselungsmethoden.

Die zweite Lösung ist ein von Oracle bereitgestellter Patch der bestehende Java Version um stärkere Verschlüsselungsmethoden ergänzt, so dass der Java Client auch mit der alten Java Version in einer höheren Verschlüsselung mit dem Webserver kommunizieren kann. Diese Extensions findet man auf der Oracle Seite unter der Bezeichnung Java Cryptography Extension inklusive Installationsanleitung.

Beide Lösungen sind als gleichwertig gut zu betrachten da sie das Problem bei der Wurzel packen und eine stärkere Verschlüsselung ermöglichen. In jedem Fall sollte man danach die in Lösung 1 eingefügten Zeilen für die Kompatibilität der Export Cipher Suites wieder aus der Zertifikat Datei entfernen und den Apache2 Webserver erneut durchstarten.

1 Comment

Leave a Reply

Your email address will not be published. Required fields are marked *