Tomcat und das SSL-Zertifikat
Sofern in Ihrem Fall noch kein KEY oder gar CSR erstellt wurde und Sie ganz am Anfang stehen ein Tipp vorab: "keytool" nehmen um den Keystore, KEY und CSR zu erstellen. Denn dann kann nach der "üblichen Methode" vorgegangen werden:
Key generieren:
keytool -genkey -alias server -keyalg RSA -keystore keystore.jks -keysize 2048
CSR generieren:
keytool -certreq -alias server -keystore keystore.jks -file mydomain.csr
Root oder Intermediate einfügen:
keytool -import -trustcacerts -alias root -file Thawte.crt -keystore keystore.jks
Das gekaufte persönliche Zertifikat einfügen:
keytool -import -trustcacerts -alias server -file mydomain.crt -keystore keystore.jks
Wenn man aber seinen CSR via OpenSSL (RSA Key) erstellt hat, z.B. so:
openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
...dann wird das ganze etwas komplizierter, denn "keytool" sieht eigentlich keinen KEY-Import vor.
Zudem muß die "chain of trust" hergestellt werden! Ansonsten wird man den bekannten Browser-Zertifikatsfehler erhalten.
Ausgangssituation, man hat:
- Den eigenen private key (server.key)
- Den CSR den man der Authority geschickt hat (server.csr)
- Das gekaufte Zertifikat das man zurück erhalten hat (server.cert)
- Das Root-Zertifikat der CA (root.cert)
- Das Zwischenzertifikat der CA (intermediate.cert)
So gehts:
Das Zwischenzertifikat, die Stammzertifikate im Betriebssystem(!) und das Root-CA-Zertifikat zusammenführen, z.B.:
$ cat intermediate.cert /usr/share/ncat/ca-bundle.crt root.cert > /tmp/alle-zusammen.cert
Erstellen der PKCS12 Datei:
$ openssl pkcs12 -export -chain -inkey server.key -in server.cert -name "server" -CAfile /tmp/alle-zusammen.cert -out server.p12
Mittels keytool überprüfen ob die "chain of trust" gegeben ist:
$ keytool -list -v -storetype pkcs12 -keystore server.p12
Auf der ersten Seite sollte etwas wie "Certificate chain length: 3" (oder höhere Zahl) stehen. Das war dann ein Erfolg!
Da keytool nun selber keinen Import dieser Datei ermöglicht muß die Jetty Server API benutzt werden. Bezug hier:
http://grepcode.com/snapshot/repo1.maven.org/maven2/org.mortbay.jetty/je...
Nun zum Import:
java -classpath [...]jetty-6.1.3.jar org.mortbay.jetty.security.PKCS12Import server.p12 keystore-datei
Sollte dieser letzte Befehl einen "too long[...]" Fehler bringen, ist im ersten Schritt (Zusammenführung mit "cat")
die ca-bundle.crt Datei auf die Einträge zu reduzieren die der Root-CA angehören bei der man das Zertifikat gekauft hat.
Dann die nachfolgenden Schritte bitte wiederholen.
Das Ergebnis "keystore-datei" ist die Ziellinie. Nun muß dies nur noch konform in der "server.xml" von Tomcat hinterlegt werden, z.B. so (Connector-Abschnitt):
[...]
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="keystore-datei" keystorePass="das-gewaehlte-passwort"
clientAuth="false" sslProtocol="TLS"/>
[...]
Das ist (auskommentiert) üblicherweise vorbereitet in der Default-Konfiguration.
Fertig!