Self-signed Zertifikate für lokale Webservices mit OpenSSL selbst erstellen
Nicht für jeden Webservice ist es notwendig, ein kostenpflichtiges SSL-Zertifikat von einer anerkannten Registrierungsstelle zu erwerben. So kommen Entwicklungssysteme oder Dienste für eine eingeschränkte nicht-öffentliche Zielgruppe, bei denen es nur auf eine zuverlässige Verschlüsselung, aber nicht auf eine Verifizierung ankommt durchaus mit selbst erstellten Zertifikaten aus.
Self-signed Zertifikat erstellen
Eigene Zertifikate lassen sich mit OpenSSL sowohl unter Linux als auch Windows sehr einfach und rasch mit dem folgenden Befehl erstellen. Die für das Zertifikat notwendigen Daten werden dabei durch das Tool über die Kommandozeile abgefragt. Im unteren Beispiel habe ich ein Zertifikat für einen Entwicklungsrechner erstellt und daher eine Gültigkeit von 10 Jahren (3650 Tage) gesetzt, dieser Wert lässt sich aber beliebig an die eigenen Bedürfnisse anpassen.
openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout myserver.key -out myserver.crt
Einbinden des Zertifikats in Apache
Das Zertifikat lässt sich nach Aktivieren des Moduls mod_ssl in Apache sehr einfach über die folgenden beiden Konfigurationsparameter einbinden:
SSLCertificateFile /etc/apache/certs/myserver.crt
SSLCertificateKeyFile /etc/apache/certs/myserver.key
Viel spannender ist es dann allerdings eine geeignete Konfiguration für mod_ssl zu finden, die den aktuellen Anforderungen an die Sicherheit und die Unterstützung verschiedener Sicherheitsmechanismen und Verschlüsselungstechniken durch die Browser gerecht wird. Mit der folgenden Konfiguration habe ich gute Erfahrungen gemacht:
SSLEngine on
# configure ssl like recommended by letsencrypt
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
SSLCompression off
SSLOptions +StrictRequire
# enable HSTS - HTTP Strict Transport Security
#Header always set Strict-Transport-Security "max-age=31536000"
Seien Sie vorsichtig mit dem Aktivieren von HSTS bei Self-signed-Zertifikaten, da Browser es nicht erlauben Ausnahmen für mit HSTS gesicherte Webseiten für nicht verifizierte oder gültige Zertifikate zu setzen (Siehe dazu auch den Artikel: Firefox erlaubt keine Ausnahmen für selbst-signierte Zertifikate für mit HSTS gesicherte Websites zu erstellen).
Die Sicherheit der eigenen SSL-Konfiguration und Zertifikate lässt sich am einfachsten mit dem folgenden Webdienst prüfen: www.ssllabs.com/ssltest/