Aus SatriaWiki
Wechseln zu: Navigation, Suche
K (Ohne CA root Zertifikat (selbst signiert))
K
Zeile 1: Zeile 1:
== OpenSSL<br/> ==
+
== 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<br/> ==
+
== Eigenes Class 1 Zertifikat erstellen ==
  
=== Mit eigenem CA root Zertifikat (eigener Zertifizierungsstelle)<br/> ===
+
=== 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.
Zeile 13: Zeile 13:
 
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.
 
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<br/> ====
+
==== 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<br/> =====
+
===== 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<br/> =====
+
===== 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<br/> ====
+
==== Server-Zertifikat erstellen ====
  
===== Private key generieren<br/> =====
+
===== Private key generieren =====
  
 
<code>openssl genrsa -out Certificate.key 2048</code>
 
<code>openssl genrsa -out Certificate.key 2048</code>
  
===== Zertifikatsanfrage erzeugen<br/> =====
+
===== 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<br/> =====
+
===== 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)<br/> ===
+
=== 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:
Zeile 68: Zeile 68:
 
<code>openssl req -new -x509 -keyout Certificate.key -out Certificate.cer -days 365 -nodes</code>
 
<code>openssl req -new -x509 -keyout Certificate.key -out Certificate.cer -days 365 -nodes</code>
  
== PKCS#12 Zertifikat und keystore<br/> ==
+
== PKCS#12 Zertifikat und keystore ==
  
 
Ausgangssituation:
 
Ausgangssituation:
Zeile 90: 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<br/> ==
+
== 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/>&nbsp;&nbsp;&nbsp; maxThreads="150" SSLEnabled="true" scheme="https" secure="true"<br/>&nbsp;&nbsp;&nbsp; clientAuth="false" sslProtocol="TLS"<br/>&nbsp;&nbsp;&nbsp; <span style="color:#ff0000">SSLCertificateFile</span>="&lt;Pfad+Dateiname&gt;.cer"<br/>&nbsp;&nbsp;&nbsp; <span style="color:#ff0000">SSLCertificateKeyFile</span>="&lt;Pfad+Dateiname&gt;.key"<br/><span style="color:#ff0000">&nbsp;&nbsp;&nbsp; SSLCertificateChainFile</span>="&lt;Pfad+Dateiname&gt;.cer"/></code>
+
<code><Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"<br/>
 +
&nbsp;&nbsp;&nbsp; maxThreads="150" SSLEnabled="true" scheme="https" secure="true"<br/>
 +
&nbsp;&nbsp;&nbsp; clientAuth="false" sslProtocol="TLS"<br/>
 +
&nbsp;&nbsp;&nbsp; <span style="color:#ff0000">SSLCertificateFile</span>="&lt;Pfad+Dateiname&gt;.cer"<br/>
 +
&nbsp;&nbsp;&nbsp; <span style="color:#ff0000">SSLCertificateKeyFile</span>="&lt;Pfad+Dateiname&gt;.key"<br/>
 +
<span style="color:#ff0000">&nbsp;&nbsp;&nbsp; SSLCertificateChainFile</span>="&lt;Pfad+Dateiname&gt;.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>
  
== Quellen<br/> ==
+
== 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]

Version vom 29. März 2019, 14:03 Uhr

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.

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/