Inhaltsverzeichnis
OpenSSL
Mal sollte den Pfad zur openssl.exe in die PATH Umgebungsvariable mit aufnehmen.
Ebenso kann es erforderlich sein, OPENSSL_CONF auf diesen Pfad zu setzen.
Eigenes Class 1 Zertifikat erstellen
Mit eigenem CA root Zertifikat (eigener Zertifizierungsstelle)
Das OpenSource Projekt OpenSSL befähigt dazu, selbst eine CA (Certificate Authority) zu werden, Root Zertifikate und Server-Zertifikate zu erstellen.
Wird im Browser das Root-Zertifikat bekannt gemacht (importiert), werden die selbst erstellten Zertifikate als gültig angesehen. Andernfalls erfolgt eine Warnung, die sich in den meisten Browsern so bestätigen lässt, dass das (nicht vertrauenswürdige) Zertifikat akzeptiert wird.
CA Zertifikat erstellen
- CA.key: Private key der eigenen CA.
- CARoot.cer: Zertifikat der eigenen CA.
- Certificate.key: Private key des zukünftigen Server-Zertifikates
- Certificate.csr: Zertifikatsanfrage. Wird nur zum Erstellen des Zertifikates benötigt.
- Certificate.cer: Das Server-Zertifikat.
Private key generieren
openssl genrsa -aes256 -out CA.key 2048
- aes256 Die erzeugte Datei wird mit einem Passwort geschützt.
- 2048: Die Bitlänge des Keys.
Root-Zertifikat erstellen
openssl req -x509 -new -nodes -extensions v3_ca -key CA.key -days 1095 -out CARoot.cer -sha512
Server-Zertifikat erstellen
Private key generieren
openssl genrsa -out Certificate.key 2048
Zertifikatsanfrage erzeugen
openssl req -new -key Certificate.key -out Certificate.csr -sha512
Zertifikatsanfrage durch die CA beantworten
Hierbei wird das Zertifikat inklusive public key erstellt, der zum angegebenen private key passt:
openssl x509 -req -in Certificate.csr -CA CARoot.cer -CAkey CA.Key -CAcreateserial -out Certificate.cer -days 365 -sha512
- CAcreateserial erstellt eine gleichnamige Seriennummerdatei, also CARoot.srl.
Alternativ, wenn bereits eine Seriennummerdatei existiert, kann sie mit dem Parameter -CAserial <file> referenziert werden:
openssl x509 -req -in Certificate.csr -CA CARoot.cer -CAkey CA.Key -CAserial CARoot.srl -out Certificate.cer -days 365 -sha512
Wurde Certificate
.cer
korrekt erstellt, kann Certificate
.csr
gelöscht werden.
Ohne CA root Zertifikat (selbst signiert)
Wenn man kein CA root Zertifikat benötigt, weil man es nie in irgendeinem Browser installieren möchte und / oder man keine weiteren Serverzertifikate braucht, die von derselben Zertifizierungsstellt ausgestellt wurden, dann kann man das Ganze auch abkürzen, mit dem Kommando:
openssl req -new -x509 -keyout <code>Certificate
.pem -out Certificate
.pem -days 365 -nodes</code>
Hier werden in einem Schritt der private Schlüssel und das fertige Zertifikat erstellt und beides in die Datei Certificate.pem
geschrieben.
Wird beides getrennt voneinander benötigt, werden 2 Dateinamen angegeben:
openssl req -new -x509 -keyout <code>Certificate
.key -out Certificate
.cer -days 365 -nodes</code>
PKCS#12 Zertifikat und keystore
Ausgangssituation:
Man hat bereits einen privaten Schlüssel und erhält ein dazu passendes signiertes Zertifikat. Beides liegt im PEM Format vor (Base64 ASCII).
Mit OpenSSL konvertiert man alle Zertifikate zusammen in ein PKCS#12 Zertifikat (PFX, P12)
openssl pkcs12 -export -out certificate.p12 -inkey privateKey.key -in certificate.cer -certfile Primary.cer -certfile Secondary.cer
Primary.cer und Secondary.cer sind Intermediate CA Zertifikate, die ggf. für Apache benötigt werden.
Aus dieser .p12 Datei wird ein neuer keystore generiert:
keytool -importkeystore -srckeystore certificate.p12 -srcstoretype pkcs12 -destkeystore keystore.jks -deststoretype jks
-alias 1 -destalias EinKeyStoreAlias
können zusätzlich angegeben werden.
Dabei muss man sich in dem Ordner befinden, in der die keystore-Datei abgelegt werden soll.
Einbindung in Tomcat
Die Einbindung der PEM-Zertifikate in den Tomcat erfolgt dann in der server.xml in dem HTTPS-Connector:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
SSLCertificateFile="<Pfad+Dateiname>.cer"
SSLCertificateKeyFile="<Pfad+Dateiname>.key"
SSLCertificateChainFile="<Pfad+Dateiname>.cer"/>
Das ChainFile ist u.U. erforderlich, wenn ein Browser Probleme in oder mit der certificate chain hat. Die Chain sind alle Zertifikate oberhalb des Serverzertifikates. In der Datei stehen sie in umgekehrter Reihenfolge, also das höchste (root) steht am Ende.
Quellen
https://www.sslshopper.com/ssl-converter.html
http://peter-on-java.blogspot.co.uk/2013/12/importing-ssl-certificates-to-keystore.html
https://thomas-leister.de/internet/eine-eigene-openssl-ca-erstellen-und-zertifikate-ausstellen/
http://datacenteroverlords.com/2012/03/01/creating-your-own-ssl-certificate-authority/