Aus SatriaWiki
Version vom 19. April 2023, 14:34 Uhr von Satria (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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 mit dieser CA ausgestellten Zertifikate ohne Warnung 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 Certificate.pem -out Certificate.pem -days 365 -nodes

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 verschiedene Dateinamen angegeben:

openssl req -new -x509 -keyout Certificate.key -out Certificate.cer -days 365 -nodes

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.

certbot

Das tool von letsencrypt stellt gültige (nicht selbst signierte) SSL Zertifikate zur Verfügung und kann dabei auch den lokalen HTTP Server verwenden.

Es sei hier nur als Hilfestellung festgehalten, dass die erzeugten privaten Schlüssel ggf. zu klein sind (256 bit). Um sie mit 2048 bit generieren zu lassen, lautet der Befehl:

certbot certonly --rsa-key-size 2048 --key-type rsa

Die so erzeugten Zertifikate sind jeweils 3 Monate gültig. Das regelmäßige Erneuern geht mit dem Befehl:

certbot renew

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/