Erstellung eines Serverzertifikats zur Nutzung des SunJsseListeners

Für die gesicherte Kommunikation eines HTTP-Clients unter Nutzung des HTTPS-Protokolls ist auf Serverseite die Verwendung eines Zertifikats erforderlich. Damit das Zertifikat eines Servers vom Client als gültig angesehen wird, müssen folgende Voraussetzungen erfüllt sein.


  • Das Serverzertifikat muss gültig sein, d. h. der Name des Servers im Zertifikat muss mit dem Servernamen übereinstimmen, der in der URL angegeben wurde und das aktuelle Datum im Gültigkeitsbereich des Zertifikats liegen.

  • Das Serverzertifikat muss von einer vertrauenswürdigen Seite als gültig zertifiziert sein. Diese das Serverzertifikat betreffende Zertifikate sind zu einer sogenannten Zertifikatskette zusammengefasst.

  • Das von der vertrauenswürdigen Seite stammende Zertifikat muss ebenfalls einen Gültigkeitszeitraum haben, der das aktuelle Datum umfasst.


Im Folgenden soll beschrieben werden, wie ein Zertifikat erstellt und von einer Zertifizierungsstelle signiert werden kann. Der Vorgang für die Erstellung eines vom HTTP-Server zu verwendenden Zeritifikats unterteilt sich in die folgenden Schritte.


  • Erstellung eines Zertifikats mit serverspezifischen Angaben.

  • Erzeugung eines CSRs (Certificate Signing Request).

  • Senden des CSRs an eine Zertifizierungsstelle (CA).

  • Importieren des von der Zertifizierungsstelle zurückgesendeten Zertifikats in das Serverzertifikat.


Der SunJsseListener nutzt für die Verwaltung von Zertifikaten das Java-eigene Keystoreformat, für dessen Verwaltung das kommandozeilenorientierte Programm keytool existiert. Dieses ist bei jeder Java-Installation vorhanden und sollte direkt aufrufbar sein. Ist dies nicht der Fall, ist zu prüfen, wo sich die Datei befindet und die systemeigene Umgebungsvariable für die nach ausführbaren Programmen zu durchsuchenden Verzeichnisse entsprechend zu erweitern.

Erstellung eines Zertifikats


Folgender Aufruf lässt das Programm keytool ein neues Serverzertifikat erstellen. Hinweis: Für <IS> ist das Installationsverzeichnis des Integration Servers einzutragen.


keytool -genkey -alias MyServerCertificate -keyalg RSA -keysize 1024 -dname\CN=my.server.domain, OU=Development, O=Lobster GmbH,C=DE" -keystore /<IS>/etc/sslkeystore.dat -storepass keystorepasswd -keypass certicatepasswd -validity 365


Dabei ist zu beachten, dass die Eingabe in einer Zeile zu erfolgen hat, auch wenn sie hier mehrzeilig erscheint. Die einzelnen Parameter haben hierbei die folgende Bedeutung.


-genkey

Weist keytool an, ein neues Zertifikat zu erstellen.

-alias

Der Name, unter dem das Zertifikat im Keystore abgelegt wird und unter dem das Zertifikat zukünftig abgerufen werden kann.

-keyalg

Der zu verwendende Algorithmus des dem Zertifikat zugrundeliegenden Verschlüsselungsverfahrens.

-keysize

Die zu verwendende Schlüsselgröße.

-dname

Der X.500 Distinguished Name, der das Zertifikat beschreibt. Der Common Name (CN) muss dabei dem Namen des Servers entsprechen, wie er in der später in der URL verwendet wird. Die Angabe eines anderen Namens kann dazu führen, dass von Clients Warnungen ausgegeben werden, dass der angegebene Name nicht mit dem realen Namen übereinstimmt.

-keystore

Der Dateiname des zu verwendenden Keystores. Existiert keine Datei mit diesem Namen, wird eine neue Datei angelegt.

-storepass

Das Passwort für den Zugriff auf den Keystore. Wird ein neuer Keystore angelegt, wird das angegebene Passwort als neues zu setzendes Passwort verwendet.

-keypass

Das Passwort für den Zugriff auf den privaten Schlüssel des Zertifikats. Dieses wird für das Signieren und bei der Authentifizierung des Servers verwendet.

-validity

Der Gültigkeitszeitraum des Zertifikats in Tagen.


Ist der Aufruf erfolgreich, kehrt der Programmaufruf ohne weitere Meldung zurück. Anschließend sollte sich an der angegebenen Stelle die Keystoredatei befinden.

Werden einzelne Parameter weggelassen (z. B. keyalg) wird teilweise ein Standardwert verwendet oder eine interaktive Abfrage (z .B. bei dname) gestartet.

Achtung: Standardinstallationen von Virtual Machines können unter Umständen hinsichtlich der Schlüsselgröße eingeschränkt sein, um Exportrestriktionen z. B. der USA zu entsprechen. Um in der Lage zu sein, sicherheitstechnisch akzeptable Schlüsselgrößen verwenden zu können ist es daher eventuell notwendig, die Virtual Machine für starke Verschlüsselung freizuschalten. Für nähere Informationen ist hierbei die Dokumentation der Virtual Machine zu Rate zu ziehen.

Erzeugung eines CSRs


Soll das Serverzertifikat von einem Standardbrowser als gültig akzeptiert werden, muss dieses von einer akzeptierten Zertifizierungsstelle signiert worden sein. Hierzu ist ein sogenannter Certificate Signing Request (CSR) zu erstellen und an die Zertifizierungsstelle zu schicken. Dies erfolgt über folgenden Aufruf des Programms keytool. Hinweis: Für <IS> ist das Installationsverzeichnis des Integration Servers einzutragen.


keytool -certreq -alias MyServerCertificate -file MyServerCertificate.csr -keystore /<IS>/etc/sslkeystore.dat -storepass keystorepasswd -keypass certificatepasswd


Die Parameter haben hier prinzipiell die gleiche Bedeutung wie zuvor beschrieben. Die neu hinzugekommenen Parameter haben die folgende Bedeutung.


-certreq

Weist keytool an, einen Certificate Signing Request (CSR) zu erstellen.

-file

Der Dateiname unter dem die CSR-Datei abgespeichert werden soll.


Wurde der CSR erfolgreich erstellt, kehrt das Programm ohne Meldung wieder zurück. Anschließend sollte sich an der entsprechenden Stelle eine Datei mit dem angegebenen Namen befinden, deren Inhalt ungefähr folgendermaßen aussieht.


----- BEGIN NEW CERTIFICATE REQUEST -----
MIICXjCCAhwCAQAwWjELMAkGA1UEBhMCREUxGDAWBgNVBAoTD0VCRCBJbnRlZ3JhdGlvbjEUMBIG
A1UECxMLRGV2ZWxvcG1lbnQxGzAZBgNVBAMTEkludGVncmF0aW9uIFNlcnZlcjCCAbcwggEsBgcq
hkjOOAQBMIIBHwKBgQD9f1OBHXUSKVLfSpwu7OTn9hG3UjzvRADDHj + AtlEmaUVdQCJR +1 k9jVj6
v8X1ujD2y5tVbNeBO4AdNG / yZmC3a5lQpaSfn + gEexAiwk +7 qdf+ t8Yb + DtX58aophUPBPuD9tPF
HsMCNVQTWhaRMvZ1864rYdcq7 / IiAxmd0UgBxwIVAJdgUI8VIwvMspK5gqLrhAvwWBz1AoGBAPfh
oIXWmz3ey7yrXDa4V7l5lK +7+ jrqgvlXTAs9B4JnUVlXjrrUWU / mcQcQgYC0SRZxI + hMKBYTt88J
MozIpuE8FnqLVHyNKOCjrh4rs6Z1kW6jfwv6ITVi8ftiegEkO8yk8b6oUZCJqIPf4VrlnwaSi2Ze
gHtVJWQBTDv + z0kqA4GEAAKBgFN5vm5j0MItfhazooi9Vfck6wbtytScYKHkGFxUBVlhTCW6PUl3
nd2alJn5 / ZP8YmlCY + TwPXh2H +h+ IpMkYJ865DZ9QOehl8WWvKN /dq /7 sTm0h3VRMXhV + kaiHEOa
XTTtGWatbXpsvioiYHB8h +670 m7of4XhI9Ozvr1fKcKxoAAwCwYHKoZIzjgEAwUAAy8AMCwCFFIG
DBzzfekvCSEeqXDacUVz25XsAhR6 +0+ wi/ wEjac2RcOEYiQZ + NWPfA ==
-----END NEW CERTIFICATE REQUEST -----


Diese Datei kann anschließend an die gewünschte Zertifizierungsstelle geschickt werden, damit diese eine entsprechende Signierung vornehmen kann.

Importieren der CA-Signatur


Wurde das Zertifikat von der Zertifizierungsstelle signiert und als Datei z. B. mit dem Namen CASign.x500 zurückgeschickt, muss dieses in den Keystore integriert werden. Dies erfolgt durch folgenden Aufruf. Hinweis: Für <IS> ist das Installationsverzeichnis des Integration Servers einzutragen.


keytool -import -alias MyServerCertificate -file CASign.x500 -keystore /<IS>/etc/sslkeystore.dat -storepass keystorepasswd -keypass certificatepasswd


Konnte das Zertifikat erfolgreich importiert werden, kehrt das Programm ohne Fehlermeldung zurück. Je nach Java-Version kann eine Erfolgsmeldung erscheinen oder die Rückkehr ohne weitere
Meldung erfolgen.

Anschließend sollte der Server per HTTPS ansprechbar sein, ohne dass der Browser Warnungen oder Fehlermeldungen bezüglich Gültigkeit oder mangelnder Vertrauenswürdigkeit ausgibt.

Zu beachten ist, dass Signaturen von CA-Stellen üblicherweise zeitlich eingeschränkt sind und nach Ablauf dieser Zeit erneuert werden müssen, damit Browser keine Meldungen bezüglich abgelaufener Zertifikate generieren.

Je nach Java-Version muss das Root-Zertifikat, mit dem die CA-Signatur erstellt wurde, im globalen (also Java-weiten) oder lokalen (im obigen Beispiel sslkeystore.dat) Keystore vorhanden sein. Ist das nicht der Fall, können mehr oder weniger aussagekräftige Fehlermeldungen die Folge sein, z. B. die folgende Meldung.


Keytool-Fehler: java.lang.Exception: Kette konnte nicht aus Antwort entnommen werden.


In so einem Fall muss das Root-CA-Zertifikat manuell nachinstalliert werden. Dies erfolgt auf die gleiche Weise wie beim Import der CA-Signatur, ein passender (aber bisher vom Integration Server nicht verwendeter) Alias muss hierbei gewählt werden. Hier ein Beispielaufruf mit dem Demo-Zertifikat von trustcenter.de.


keytool -import -alias trustcenterca0 -keystore testkeystore.dat -storepass keystorepasswd -file pr_TC_TrustCenter_Class_0_CA_2013.der