Page tree

Wenn sie zu dieser Seite Bemerkungen haben klicken sie bitte hier: Kontaktformular

Skip to end of metadata
Go to start of metadata

Allgemeines

Um aus einem Java-Programm (z.B. aus einem Tomcat oder jboss o.ä.) auf eine durch ssl gesicherte Verbindung zugreifen möchte muss das Zertifikat des Zielservers im sogenannten JAVA keystore speichern.
Während der Speicherung muss dann auch angegeben werden, ob man diesem Zertifikat vertraut.

Selbstverständlich laufen diese Zertifkate irgendwann ab und man muss rechtzeitig vorher ein neues Zertifikat installieren und auch alle JAVA-Keystores entsprechend mit dem neuen Zertifikat aktualisieren.

Das Ganze ist eine Sicherheitsfunktion.

Sollte ein Angreifer durch Manipulation den Zielserver übernehmen und das Zertifikat ändern, oder eine sogenannte "Man-in-the-Middle"-Attack vorliegen wird das Zertifikat abgelehnt.
Von einer Man-in-the-Middle-Attack spricht man, wenn sich zwischen dem Client und dem Server ein weiterer Server einschaltet der vorgibt der Zielserver zu sein.

Wie kann ich das Zertifkat des Zielservers bekommen und speichern

Das Zertifikat kann mit dem folgenden Befehl erstellen:

openssl s_client -connect ZIELADRESSE:PORT

Zieladresse ist die IP-Adresse bzw. DNS-Name des Zielservers
Port ist der Zielport zu dem die Verbindung aufgebaut werden soll.
Beispiel: Bei Webservern ist der typische SSL-Port 443 

Nach Ausführung des Befehls werden umfangreiche Infos über das Zielsystem angezeigt.

Alle Informationen zwischen "BEGIN CERTIFICATE" und "END CERTIFICATE" speichern sie bitte in einer Datei, z.B. "ZERTIFIKAT.cert"

Beispiel ssl-Zertifikat
----BEGIN CERTIFICATE----
IBAgIJAIVPnV704vaUMA0GCSqGSIb3DQEBBQUAMIG1MQswCQYD
...
3sUCfp4HJNQK3+qOsMmgt2X1NbBf0EXSi51CN/IgSdzhEYH+mH
----END CERTIFICATE----

Wo finde ich den JAVA Keystore

Die JAVA-Installation enthält ein Unterverzeichnis mit Namen "jre", darunter gibt es einen Ordner mit Namen "lib", darunter der Ordner "security".
In diesem Ordner ist eine Datei mit Namen cacerts.
Diese Datei enthält den default JAVA keystore. (Das standard-Kennwort dazu ist "changeit")
Selbstverständlich wäre es auch möglich für jede Anwendung einen eigenen keystore zu erstellen. (Anwendungsdesign ??)

In unserem Beispiel kann man den Inhalt des JAVA-keystore wie folgt anzeigen. 

root@lemaker:~# export JAVA_HOME=/opt/java
root@lemaker:~# export PATH=$JAVA_HOME/bin:$PATH
root@lemaker:~# type java
java is /opt/java/bin/java
root@lemaker:~# cd $JAVA_HOME/jre/lib/security
root@lemaker:/opt/java/jre/lib/security# ls -la cacerts
-rw-r--r-- 1 uucp 143 101768 Jun 16 18:36 cacerts
root@lemaker:/opt/java/jre/lib/security#
 
#Zertifikate anzeigen
root@lemaker:/opt/java/jre/lib/security# keytool -list -keystore cacerts
Keystore-Kennwort eingeben:  

Keystore-Typ: JKS

Keystore-Provider: SUN

Keystore enthält 95 Einträge

.... LISTE der Zertifikate ....

Import eines Zertifikats

keytool -import -alias ALIASNAME -file ZERTIFIKAT.cert -keystore cacerts

Bitte beachten, dass die Angabe "-alias" nicht zwingend ist.
Ohne diese Angabe ist der Name des Zertifikats "mykey"
Empfohlen wird aber, dass der alias identisch ist mit dem Namen des Zielsystems. 

Update oder löschen eines Zertifikates

Möchten sie ein vorhandenes Zertifikat ändern so muss das alte Zertifikat zuvor aus dem Zertifikatsspeicher gelöscht werden.

keytool -delete -alias ALIASNAME -keystore cacerts