Satria (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== OpenSSL<br/> == Mal sollte den Pfad zur openssl.exe in die PATH Umgebungsvariable mit aufnehmen. Ebenso kann es erforderlich sein, OPENSSL_CONF auf diesen…“) |
Satria (Diskussion | Beiträge) |
||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | == OpenSSL | + | == OpenSSL == |
Mal sollte den Pfad zur openssl.exe in die PATH Umgebungsvariable mit aufnehmen. | Mal sollte den Pfad zur openssl.exe in die PATH Umgebungsvariable mit aufnehmen. | ||
Zeile 5: | Zeile 5: | ||
Ebenso kann es erforderlich sein, OPENSSL_CONF auf diesen Pfad zu setzen. | Ebenso kann es erforderlich sein, OPENSSL_CONF auf diesen Pfad zu setzen. | ||
− | == Eigenes Class 1 Zertifikat erstellen | + | == Eigenes Class 1 Zertifikat erstellen == |
− | === Mit eigenem CA root Zertifikat (eigener Zertifizierungsstelle) | + | === 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. | 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 | + | 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 Zertifikat erstellen ==== |
*CA.key: Private key der eigenen CA. | *CA.key: Private key der eigenen CA. | ||
Zeile 21: | Zeile 21: | ||
*Certificate.cer: Das Server-Zertifikat. | *Certificate.cer: Das Server-Zertifikat. | ||
− | ===== Private key generieren | + | ===== Private key generieren ===== |
<code>openssl genrsa -aes256 -out CA.key 2048</code> | <code>openssl genrsa -aes256 -out CA.key 2048</code> | ||
Zeile 28: | Zeile 28: | ||
*2048: Die Bitlänge des Keys. | *2048: Die Bitlänge des Keys. | ||
− | ===== Root-Zertifikat erstellen | + | ===== Root-Zertifikat erstellen ===== |
<code>openssl req -x509 -new -nodes -extensions v3_ca -key CA.key -days 1095 -out CARoot.cer -sha512</code> | <code>openssl req -x509 -new -nodes -extensions v3_ca -key CA.key -days 1095 -out CARoot.cer -sha512</code> | ||
− | ==== Server-Zertifikat erstellen | + | ==== Server-Zertifikat erstellen ==== |
− | ===== Private key generieren | + | ===== Private key generieren ===== |
<code>openssl genrsa -out Certificate.key 2048</code> | <code>openssl genrsa -out Certificate.key 2048</code> | ||
− | ===== Zertifikatsanfrage erzeugen | + | ===== Zertifikatsanfrage erzeugen ===== |
<code>openssl req -new -key Certificate.key -out Certificate.csr -sha512</code> | <code>openssl req -new -key Certificate.key -out Certificate.csr -sha512</code> | ||
− | ===== Zertifikatsanfrage durch die CA beantworten | + | ===== Zertifikatsanfrage durch die CA beantworten ===== |
Hierbei wird das Zertifikat inklusive public key erstellt, der zum angegebenen private key passt: | Hierbei wird das Zertifikat inklusive public key erstellt, der zum angegebenen private key passt: | ||
Zeile 56: | Zeile 56: | ||
Wurde <code>Certificate</code><code>.cer</code> korrekt erstellt, kann <code>Certificate</code><code>.csr</code> gelöscht werden. | Wurde <code>Certificate</code><code>.cer</code> korrekt erstellt, kann <code>Certificate</code><code>.csr</code> gelöscht werden. | ||
− | === Ohne CA root Zertifikat (selbst signiert) | + | === 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: | 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: | ||
− | <code>openssl req -new -x509 -keyout | + | |
+ | <code>openssl req -new -x509 -keyout 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 <code>Certificate.pem </code>geschrieben. | Hier werden in einem Schritt der private Schlüssel und das fertige Zertifikat erstellt und beides in die Datei <code>Certificate.pem </code>geschrieben. | ||
− | Wird beides getrennt voneinander benötigt, werden 2 Dateinamen angegeben: | + | Wird beides getrennt voneinander benötigt, werden 2 verschiedene Dateinamen angegeben: |
− | <code>openssl req -new -x509 -keyout | + | |
− | == PKCS#12 Zertifikat und keystore | + | <code>openssl req -new -x509 -keyout Certificate.key -out Certificate.cer -days 365 -nodes</code> |
+ | |||
+ | == PKCS#12 Zertifikat und keystore == | ||
Ausgangssituation: | Ausgangssituation: | ||
Zeile 86: | Zeile 90: | ||
Dabei muss man sich in dem Ordner befinden, in der die keystore-Datei abgelegt werden soll. | Dabei muss man sich in dem Ordner befinden, in der die keystore-Datei abgelegt werden soll. | ||
− | == Einbindung in Tomcat | + | == Einbindung in Tomcat == |
Die Einbindung der PEM-Zertifikate in den Tomcat erfolgt dann in der server.xml in dem HTTPS-Connector: | Die Einbindung der PEM-Zertifikate in den Tomcat erfolgt dann in der server.xml in dem HTTPS-Connector: | ||
− | <code><Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"<br/> maxThreads="150" SSLEnabled="true" scheme="https" secure="true"<br/> clientAuth="false" sslProtocol="TLS"<br/> <span style="color:#ff0000">SSLCertificateFile</span>="<Pfad+Dateiname>.cer"<br/> <span style="color:#ff0000">SSLCertificateKeyFile</span>="<Pfad+Dateiname>.key"<br/><span style="color:#ff0000"> SSLCertificateChainFile</span>="<Pfad+Dateiname>.cer"/></code> | + | <code><Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"<br/> |
+ | maxThreads="150" SSLEnabled="true" scheme="https" secure="true"<br/> | ||
+ | clientAuth="false" sslProtocol="TLS"<br/> | ||
+ | <span style="color:#ff0000">SSLCertificateFile</span>="<Pfad+Dateiname>.cer"<br/> | ||
+ | <span style="color:#ff0000">SSLCertificateKeyFile</span>="<Pfad+Dateiname>.key"<br/> | ||
+ | <span style="color:#ff0000"> SSLCertificateChainFile</span>="<Pfad+Dateiname>.cer"/></code> | ||
<code>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.</code> | <code>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.</code> | ||
− | == | + | == 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: | ||
+ | |||
+ | <pre>certbot certonly --rsa-key-size 2048 --key-type rsa</pre> | ||
+ | |||
+ | Die so erzeugten Zertifikate sind jeweils 3 Monate gültig. Das regelmäßige Erneuern geht mit dem Befehl: | ||
+ | |||
+ | <pre>certbot renew</pre> | ||
+ | |||
+ | == Quellen == | ||
[https://www.sslshopper.com/ssl-converter.html https://www.sslshopper.com/ssl-converter.html] | [https://www.sslshopper.com/ssl-converter.html https://www.sslshopper.com/ssl-converter.html] |
Aktuelle Version vom 19. April 2023, 14:34 Uhr
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 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/