Ein Certificate Signing Request mit OpenSSL erstellen
Um für die eigene Internetpräsenz bzw. Domain ein signiertes Zertifikat zu erhalten wird eine so genannte Zertifikatsregistrierungsanforderung / Certificate Signing Request CSR benötigt. Diese kann mit Hilfe von OpenSSL wie folgt erzeugt werden:
openssl req -nodes -new \ -newkey rsa:4096 -keyout domain.tld.key \ -out donain.tld.csr
Der Kommandozeilenbefehl generiert nach Eingabe notwendiger Daten
einen 4096-Bit staken RSA Schlüssel den key
und das benötigte
CSR
, welches an die Registrierung- / Zertifizierungsstelle
weitergeleitet werden muss. Im Falle von CACert.org ist
lediglich das Eintragen des Common Name notwendig da die
restlichen Informationen nicht berücksichtigt werden. Um ein
Wildcard-Zertifikat zu erhalten muss Common Name die eigene
Domain im folgenden Format enthalten *.domain.tld
, sonst wird die
konkrete Domain angegeben. Für das Übermitteln des CSR gibt es im
CACert-Nutzerbereich ein Eingabeformular. Im nächsten Schritt steht
das von der Zertifizierungsstelle signierte Zertifikat, oft codiert
im Base64 Format, zur Verfügung und muss in eine Datei zum Beispiel
domain.tld.crt eingefügt werden.
Die digitale Signatur kann wie folgt an Hand der öffentlichen
Schlüssel der Zertifizierungsstelle überprüft werden.
curl https://www.cacert.org/certs/root.crt -o CACert_root.crt curl https://www.cacert.org/certs/class3.crt -o CACert_class3.crt openssl verify -CAfile CACert_root.crt \ -untrusted CACert_class3.crt \ domain.tld.crt
Reicht für den Einsatz ein Selbst-Signiertes Zertifikat (Self-Signed Certificate) aus kann es unter Angabe des Verfallsdatums in Tagen wie folgt erstellt werden:
openssl x509 -req -days 365 \ -in domain.tld.csr \ -signkey domain.tld.key \ -out domain.tldcrt
Nun muss das signierte Zertifikat, der private Schlüssel und ggf. der öffentlichen Schlüssel der Zertifizierungsstelle über eine sicheren Kanal auf den eigenen Webserver übertragen werden. Der Apache Webserver verlangt den privaten Schlüssel in einer unverschlüsselt Form. Dabei hilft der folgend Befehl:
openssl rsa -in domain.tld.key -out domain.tld.key.decrypt
Die Konfiguration des Webservers muss wie folgt angepasst werden:
<VirtualHost _default_:443> DocumentRoot /var/www/htdocs ServerName www.domain.tld SSLEngine on SSLCertificateFile /path/to/domain.tld.crt SSLCertificateKeyFile /path/to/domain.tld.key.decrypt SSLCertificateChainFile /path/to/CACert_class3.crt </VirtualHost>
Nun steht einer sicheren Datenübertragung nichts im Wege. Der private Schlüssel sollte an einem ebenfalls sicheren Ort gut aufbewahrt werden.