< [[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 |