OpenJDK 7 kam ohne Probleme mit 4 KBit breiten Diffie-Hellman-Schlüsselaustausch klar. Aus unbekannten Gründen ist das in OpenJDK 8 nicht mehr der Fall. Da Apache 2.4 die DH-Schlüsselbreite aus der Schlüsselbreite des SSL-Zertifikats übernimmt, kann man mit OpenJDK 8 keinen Kontakt mit Webservern aufnehmen, die eine entsprechend hohe SSL-Sicherheit bieten.
Installation von OpenJDK 8 unter Ubuntu 14.04 LTS
Unter Ubuntu 14.04 ist OpenJDK 8 noch nicht in der Distribution enthalten. Um hier ein OpenJDK 8 zu installieren, muss ein PPA-Repository in der Datei /etc/apt/sources.list ergänzt werden.
deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu trusty main
Das OpenJDK 8 wird durch folgende Befehlsfolge installiert:
sudo gpg --recv-keys EB9B1D8886F44E2A sudo gpg --export EB9B1D8886F44E2A|apt-key add - sudo apt-get update sudo apt-get install openjdk-8-jdk
Die erste Befehlsfolge installiert den Repository Key lokal, um dem PPA-Repository vertrauen zu können.
Installation von Bouncy Castle
Bouncy Castle eine Sammlung kryptografischer Algorithmen und enthält einen sog. Security Provider, welcher diese Algorithmen für das JRE bereitstellt. Glücklicherweise stellt Ubuntu 14.04 Bouncy Castle schon in der Distribution bereit und muss somit nur noch installiert werden:
sudo apt-get install libbcprov-java
Jetzt muss die Library aus dem Paket im OpenJDK sichtbar gemacht werden. Das erfolgt sinnvollerweise über einen symbolischen Link:
cd /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext sudo ln -s /usr/share/java/bcprov.jar .
Als abschließenden Schritt muss der Security Provider konfiguriert werden. Mit dem Lieblingseditor – z.B. vi – wird die Datei /etc/java-8-openjdk/security/java.security geöffnet:
sudo vi /etc/java-8-openjdk/security/java.security
Relativ am Anfang der Datei befinden sich mehrere Zeilen, die mit security.provider.X beginnen. Es sind die möglichen Security Provider, die priorisiert bei der Instanziierung abgearbeitet werden. An zweiter Stelle wird folgende Zeile eingefügt:
security.provider.2=org.bouncycastle.jce.provider.BouncyCastleProvider
Alle nachfolgenden Zeilen müssen entsprechend umnummeriert werden.
Wichtig!
Die Zeile darf nicht an erster Stelle konfiguriert werden, weil intern im OpenJDK Abhängigkeiten nicht mehr aufgelöst werden können!
Nach diesen Schritten sollte es möglich sein, mit OpenJDK 8 eine sichere SSL-Verbindung aufbauen zu können.