Java Sicherheitszertifikate

Wenn über java eine Webseite mit https angesprochen dann wird wie im Browser das Sicherheitszertifikat benötigt.

Ist das Zertifikat nicht im Standard vorhanden, dann wird es folgende Exception werfen:

javax.net.ssl.SSLHandshakeException: 
  sun.security.validator.ValidatorException: 
  PKIX path building failed: 
  sun.security.provider.certpath.SunCertPathBuilderException: 
  unable to find valid certification path to requested target

Java Standardzertifikatsdatei

Die Standardzertifikate (werden immer geladen) liegen bei Java hier:

JAVA_HOME/lib/security/cacerts


Sie können zum ansehen exportiert werden (nochmal prüfen, ob das Zertifikat wirklich fehlt).

keytool -list -v -keystore JAVA_HOME/lib/security/cacerts  > java_cacerts.txt


Für Windows; keytool liegt hier:

JAVA_HOME/bin/keytool


Nach dem ansehen sollte die Datei wieder gelöscht werden.

Zertifikate nachrüsten

Ist das Zertifikat nicht vorhanden muss Java das entsprechende Zertifikat bekannt gemacht werden. Es gibt zwei Möglichkeiten das zu hinterlegen.

  • 1. In der Standardzertifikatsdatei cacerts hinzufügen
  • 2. In einer eigenen Datei hinterlegen, die später dem Java Programm bekannt gemacht wird.

Die Vorgehensweise ist fast identisch:

Zuerst die fragliche https-Webseite ansurfen. Im Browser auf das Sicherheitsschloss klicken (meist bei der URL Leiste). Beim Firefox links der Adresse. Die Beschreibung entspricht dem Vorgehen im Firefox.

  • Die Seiteninformationen anzeigen
  • Darin die Zertifikate anzeigen
  • Tabreiter Details wählen
  • Den Button "Exportieren" klicken
  • Dateityp X.509-Zertifikat(DER)(*.der) wählen
  • Einen sprechenden Namen für die Webseite wählen (www.beispiel.der)

Variante 1: In der Standardzertifikatsdatei cacerts hinzufügen

keytool -import -alias www_beispiel -keystore "pfad/zur/cacerts" -file "pfad/zum/zertifikat/www.beispiel.der" -trustcacerts


Es erfolgt eine Abfrage nach dem Passwort der cacerts Datei. Das Standardpasswort von Java ist: changeit

Variante 2: In einer eigenen Datei hinterlegen

keytool -import -alias www_beispiel -keystore "pfad/zur/eigenen/my_cacerts" -file "pfad/zum/zertifikat/www.beispiel.der" -trustcacerts


Es erfolgt eine mehrfache Abfrage nach dem Passwort. Bei Verwendung des Standardpassworts (changeit) muss in Java das Passwort nicht zur Verfügung gestellt werden.

Zertifikat verwenden

Wurde das Zertifikat in die Standarddatei geschrieben, dann ist es unter Java sofort verfügbar. Nachteil: Das Zertifikat muss auf jedem Rechner installiert werden.

Liegt das Zertifikat in einer eigenen Datei vor, dann kann es auf zwei Wegen verwendet werden:

Beim Programmstart:

java.exe -Djavax.net.ssl.trustStore="pfad/zur/eigenen/my_cacerts" -jar my_program.jar


bzw mit Debug Informationen wenn nicht alles wie gewünscht läuft

java.exe -Djavax.net.ssl.trustStore="pfad/zur/eigenen/my_cacerts" -Djavax.net.debug=ssl -jar my_program.jar

Innerhalb des Java Programms:

System.setProperty("javax.net.ssl.trustStore", "pfad/zur/eigenen/my_cacerts");


Der Vorteil der eigenen Datei liegt klar bei der Verwendung im Netzwerk.

Links