[[dev:start|Development]]
====== HTTPS SSL-Zertifikat und eine eigene Zertifizierungsstelle ======
==== Certification Authority anlegen ====
* Verzeichnis anlegen für das Zertifikat und weitere Dateien:
root@linux# mkdir /root/ca
root@linux# cd /root/ca
* Gültigkeit: 10 Jahre
* Geheimer Schlüssel: //cakey.pem//
* CA-Zertifikat: //cacert.pem//
* Länge: 2048 Bit:
* **Wichtig:** Hier ein gutes Passwort verwenden
root@linux# openssl req -new -x509 -newkey rsa:2048 -keyout cakey.pem -out cacert.pem -days 3650
Es sind nun die Dateien //cacert.pem// und //cakey.pem// vorhanden.
* Rechte nur für root setzen:
root@linux# chmod 600 cakey.pem
* Testen, ob Schlüssel mit Password geöffnet werden kann:
root@linux# openssl rsa -in cakey.pem -noout -text
==== Schlüssel für das Serverzertifikat erzeugen ====
* Eigene CA ist nun angelegt
* Sclüssel erzeugen
* Länge: 2048 Bit
* RSA Schlüssel
* Verschlüsselung mit AES 128
* Passphrase ist egal, darf aber nicht leer sein
root@linux# openssl genrsa -out serverkey.pem -aes128 2048 -days 3650
* Passphrase wieder entfernen, damit Webserver den Schlüssel selbst lesen kann:
root@linux# openssl rsa -in serverkey.pem -out serverkey.pem
==== Certificate Signing Request erzeugen ====
* Certificate Signing Request: **CSR**
* Allgemeine Daten können wie oben sein:
* Common Name ist wichtig! Hier muss der DNS-Name stehen, unter dem der Client den Server anspricht\\ Z.B. //raspberrypi.wernerhome.local//
* _challenge password_ kann lee bleiben
root@linux# openssl req -new -key serverkey.pem -out req.pem -nodes
Mittlerweile sind vier Dateien im Verzeichnis:
root@linux# ls
cacert.pem cakey.pem req.pem serverkey.pem
==== OpenSSL-Konfiguration anpassen ====
* Datei ///etc/ssl/openssl.cnf// ändern
* In der Sektion [ CA_default ] anpassen:
dir = . # Where everything is kept
new_certs_dir = $dir # default place for new certs
private_key = $dir/cakey.pem # The private key
RANDFILE = $dir/.rand # private random number file
default_days = 3650 # how long to certify for
* Noch zwei Dateien anlegen:
root@linux# echo 01 > serial
root@linux# touch index.txt
==== Serverzertifikat signieren ====
* Unsere CA signiert nun das Zertifikat:
* Dabei das geheime Password für ///cakey.pem// s.o. eingeben:
root@linux# openssl ca -in req.pem -notext -out servercert.pem
==== Einbinden der root CA in die Zertifizierungsstelle des Browsers ====
* **Firefox:** //cacert.pem// importieren
* Einstellungen -> Erweitert -> Zertifikate
* -> Zertifikate anzeigen -> Zertifizierungsstellen
* **Chrome/Chromium:**
* Einstellungen -> Erweitert
* -> Zertifikate verwalten / HTTPS/SSL-Zertifikate und -Einstellungen verwalten
* -> Zertifizierungsstellen
==== Übersicht openssl Kommandos ====
^ Kommando ^ Erläuterung ^
| req | creates and processes certificate requests in PKCS#10 format\\ Create self signed certificates for use as root CAs |
| rsa | processes / convert RSA keys |
| genrsa | generates an RSA private key |
| ca | minimal CA application. Sign certificate requests\\ generate CRLs\\ maintains a text database of issued certificates / statuses |