Benutzer-Werkzeuge

Webseiten-Werkzeuge


it-wiki:ssl:openssl

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
it-wiki:ssl:openssl [2017/11/14 20:45] – [Serverzertifikat signieren] markoit-wiki:ssl:openssl [2024/03/30 16:10] (aktuell) – [Creating a Private Key] marko
Zeile 1: Zeile 1:
-====== Eine eigene OpenSSL CA erstellen und Zertifikate ausstellen ======+====== OpenSSL ====== 
 +===== Kleine OpenSSL FAQ Ecke ===== 
 +  * [[openssl_faq|OpenSSL FAQ]]\\ 
 +  * [[allgemeines_zu_zertifikaten|So unterscheiden sich Clientzertifikate von Serverzertifikaten]] 
 +\\ 
 +\\ 
 +===== Creating a Self-Signed Certificate With OpenSSL ===== 
 +==== Creating a Private Key ==== 
 +First, we’ll create a private key. A private key helps to enable encryption, and is the most important component of our certificate. 
 + 
 +Let’s create a password-protected, 2048-bit RSA private key (domain.key) with the openssl command: 
 +<code bash> 
 +openssl genrsa -des3 -out domain.key 2048 
 +</code> 
 +We’ll enter a password when prompted. The output will look like: 
 +<code bash> 
 +Generating RSA private key, 2048 bit long modulus (2 primes) 
 +.....................+++++ 
 +.........+++++ 
 +e is 65537 (0x010001) 
 +Enter pass phrase for domain.key: 
 +Verifying - Enter pass phrase for domain.key: 
 +</code> 
 +If we want our private key unencrypted, we can simply remove the -des3 option from the command. 
 + 
 +Nun wird die Passphrase aus dem Schlüssel entfernt. 
 +<code bash> 
 +root@linux# openssl rsa -in domain.key -out domain.key 
 +Enter pass phrase for serverkey.pem: jaja 
 +writing RSA key 
 +</code> 
 + 
 +==== Creating a Certificate Signing Request ==== 
 +If we want our certificate signed, we need a certificate signing request (CSR). The CSR includes the public key and some additional information (such as organization and country). 
 + 
 +Let’s create a CSR (domain.csr) from our existing private key: 
 +<code bash> 
 +openssl req -key domain.key -new -out domain.csr 
 +</code> 
 + 
 +We’ll enter our private key password and some CSR information to complete the process. The output will look like: 
 +<code bash> 
 +Enter pass phrase for domain.key: 
 +You are about to be asked to enter information that will be incorporated 
 +into your certificate request. 
 +What you are about to enter is what is called a Distinguished Name or a DN. 
 +There are quite a few fields but you can leave some blank 
 +For some fields there will be a default value, 
 +If you enter '.', the field will be left blank. 
 +----- 
 +Country Name (2 letter code) [AU]:AU 
 +State or Province Name (full name) [Some-State]:stateA                         
 +Locality Name (eg, city) []:cityA 
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:companyA 
 +Organizational Unit Name (eg, section) []:sectionA 
 +Common Name (e.g. server FQDN or YOUR name) []:domain 
 +Email Address []:email@email.com 
 + 
 +Please enter the following 'extra' attributes 
 +to be sent with your certificate request 
 +A challenge password []: 
 +An optional company name []: 
 +</code> 
 +An important field is “Common Name,” which should be the exact Fully Qualified Domain Name (FQDN) of our domain. 
 + 
 +“A challenge password” and “An optional company name” can be left empty. 
 + 
 +==== Creating a Self-Signed Certificate ==== 
 +A self-signed certificate is [b]a certificate that’s signed with its own private key[/b]. It can be used to encrypt data just as well as CA-signed certificates, but our users will be shown a warning that says the certificate isn’t trusted. 
 + 
 +Let’s create a self-signed certificate (domain.crt) with our existing private key and CSR: 
 +<code bash> 
 +openssl x509 -signkey domain.key -in domain.csr -req -days 365 -out domain.crt 
 +</code> 
 + 
 +\\ 
 +\\ 
 +===== Eine eigene OpenSSL CA erstellen und Zertifikate ausstellen =====
 OpenSSL bringt umfassende Werkzeuge mit, um eine eigene, kleine Certificate Authority (CA) betreiben zu können. Die Nutzung einer eigenen CA ist besonders dann sinnvoll, wenn mehrere Dienste über SSL/TLS kostenlos abgesichert werden sollen. Neben dem Nachteil, dass die eigene CA vor Benutzung zuerst auf den Clientrechnern bekannt gemacht werden muss, gibt es aber auch einen Vorteil: Mit einer CA unter der eigenen Kontrolle ist man im Zweifel auf der sicheren Seite: In den letzten Jahren wurden immer wieder Fälle bekannt, in denen große Certificate Authorities falsche Zertifikate ausgestellt haben. Es gibt Grund genug, die Vertrauenswürdigkeit großer CAs anzuzweifeln. OpenSSL bringt umfassende Werkzeuge mit, um eine eigene, kleine Certificate Authority (CA) betreiben zu können. Die Nutzung einer eigenen CA ist besonders dann sinnvoll, wenn mehrere Dienste über SSL/TLS kostenlos abgesichert werden sollen. Neben dem Nachteil, dass die eigene CA vor Benutzung zuerst auf den Clientrechnern bekannt gemacht werden muss, gibt es aber auch einen Vorteil: Mit einer CA unter der eigenen Kontrolle ist man im Zweifel auf der sicheren Seite: In den letzten Jahren wurden immer wieder Fälle bekannt, in denen große Certificate Authorities falsche Zertifikate ausgestellt haben. Es gibt Grund genug, die Vertrauenswürdigkeit großer CAs anzuzweifeln.
  
 Mit dieser Anleitung werdet ihr in der Lage sein, beliebig viele Zertifikate für eure Dienste ausstellen zu können, die in jedem Browser als gültig erkannt werden, sofern vorher das Root-Zertifikat eurer CA importiert wurde.\\ Mit dieser Anleitung werdet ihr in der Lage sein, beliebig viele Zertifikate für eure Dienste ausstellen zu können, die in jedem Browser als gültig erkannt werden, sofern vorher das Root-Zertifikat eurer CA importiert wurde.\\
 ---- ----
-===== Erstellen der CA =====+==== Erstellen der CA ====
  
 Legen Sie zunächst ein Verzeichnis an, in dem Sie das Zertifikat ablegen wollen. Wir nehmen in unserem Beispiel /root/ca: Legen Sie zunächst ein Verzeichnis an, in dem Sie das Zertifikat ablegen wollen. Wir nehmen in unserem Beispiel /root/ca:
Zeile 74: Zeile 151:
 usw... usw...
  
-===== Schlüssel für das Serverzertifikat erzeugen =====+==== Schlüssel für das Serverzertifikat erzeugen ====
 Nachdem wir nun eine eigene CA haben, kann diese nun endlich für unseren Server ein Zertifikat herausgeben. Dazu erzeugen wir zunächst einen 2048 Bit langen RSA Schlüssel, der mit AES 128 verschlüsselt auf der Platte abgelegt wird (ja wirklich, auch hier wieder ein verschlüsselter Schlüssel). Die Passphrase muss diesmal nicht sonderlich geheim sein, da wir sie ohnehin im Anschluss wieder entfernen werden. OpenSSL lässt allerdings keine leere Phrase zu: Nachdem wir nun eine eigene CA haben, kann diese nun endlich für unseren Server ein Zertifikat herausgeben. Dazu erzeugen wir zunächst einen 2048 Bit langen RSA Schlüssel, der mit AES 128 verschlüsselt auf der Platte abgelegt wird (ja wirklich, auch hier wieder ein verschlüsselter Schlüssel). Die Passphrase muss diesmal nicht sonderlich geheim sein, da wir sie ohnehin im Anschluss wieder entfernen werden. OpenSSL lässt allerdings keine leere Phrase zu:
 <code bash> <code bash>
-root@linux# openssl genrsa -out serverkey.pem -aes128 2048 -days 3650+root@linux# openssl genrsa -out serverkey.pem -aes128 2048 -days 730
 Generating RSA private key, 2048 bit long modulus Generating RSA private key, 2048 bit long modulus
 ....+++ ....+++
Zeile 93: Zeile 170:
  
  
-===== Certificate Signing Request erzeugen =====+==== Certificate Signing Request erzeugen ====
 Der nächste Schritt zum eigenen Zertifikat ist ein CSR. Dies muss dann nur noch von der CA signiert werden. Hier sind wieder Angaben analog zum Erstellen der CA nötig, was oft Verwirrung stiftet. Die allgemeinen Daten kann man ggfl. gleich wie oben eingeben: Der nächste Schritt zum eigenen Zertifikat ist ein CSR. Dies muss dann nur noch von der CA signiert werden. Hier sind wieder Angaben analog zum Erstellen der CA nötig, was oft Verwirrung stiftet. Die allgemeinen Daten kann man ggfl. gleich wie oben eingeben:
 <code bash> <code bash>
-root@linux#  openssl req -new -key serverkey.pem -out req.pem -nodes+root@linux#  openssl req -new -key serverkey.pem -out req.pem -nodes -config openssl.cnf
 You are about to be asked to enter information that will be incorporated You are about to be asked to enter information that will be incorporated
 into your certificate request. into your certificate request.
Zeile 133: Zeile 210:
  
  
-===== OpenSSL-Konfiguration anpassen =====+==== OpenSSL-Konfiguration anpassen ====
 Leider kann man bei OpenSSL nicht alle Daten als Kommandozeilenargumente übergeben. Einige Einstellungen muss man lästigerweise in der Datei /etc/ssl/openssl.cnf ändern, bevor man signieren kann. Öffnen Sie diese Datei und passen Sie folgende Zeilen in der Sektion [ CA_default ] an: Leider kann man bei OpenSSL nicht alle Daten als Kommandozeilenargumente übergeben. Einige Einstellungen muss man lästigerweise in der Datei /etc/ssl/openssl.cnf ändern, bevor man signieren kann. Öffnen Sie diese Datei und passen Sie folgende Zeilen in der Sektion [ CA_default ] an:
 <code bash> <code bash>
Zeile 156: Zeile 233:
  
  
-===== Serverzertifikat signieren =====+==== Serverzertifikat signieren ====
 Kommen wir zum feierlichen Abschluss. Damit später Chrome und Chromium Ihr Serverzertifikat akzeptiert, muß ein sogenannter "Subject Alternative Names (SAN)" ins Zertifikat eingetragen werden. Dafür wird zusätzlich eine Datei angelegt: Kommen wir zum feierlichen Abschluss. Damit später Chrome und Chromium Ihr Serverzertifikat akzeptiert, muß ein sogenannter "Subject Alternative Names (SAN)" ins Zertifikat eingetragen werden. Dafür wird zusätzlich eine Datei angelegt:
 <code bash> <code bash>
Zeile 187: Zeile 264:
  
  
-===== Zertifikate installieren =====+==== Zertifikate installieren ====
 Wohin sie die Zertifikate installieren, hängt natürlich vom jeweiligen Serverdienst ab. Was allen gemeinsam ist: Sie benötigen nur die Dateien cacert.pem, servercert.pem und serverkey.pem. Die Datei cakey.pem wird nicht benötigt. Sie sollte am besten auch nicht auf dem Server liegen sondern an einer sicheren Stelle auf einem anderen Rechner. Wohin sie die Zertifikate installieren, hängt natürlich vom jeweiligen Serverdienst ab. Was allen gemeinsam ist: Sie benötigen nur die Dateien cacert.pem, servercert.pem und serverkey.pem. Die Datei cakey.pem wird nicht benötigt. Sie sollte am besten auch nicht auf dem Server liegen sondern an einer sicheren Stelle auf einem anderen Rechner.
 +
 +
it-wiki/ssl/openssl.1510692324.txt.gz · Zuletzt geändert: von marko