blog.bartlweb - a technologist's external brain

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/

Dieser Artikel hat dir deinen Tag gerettet?
... und mühevolles Probieren, Recherchieren und damit Stunden an Zeit gespart? ... oder einfach nur dein Problem gelöst?

Dann würde ich mich freuen, wenn Du meine Zeit für die Erstellung dieses Blogartikels mit einer kleinen Spende honorierst:

Kommentare

Noch kein Kommentar vorhanden.
Sei der Erste - ich freue mich über deine Anmerkungen, Kritik und Fragen.

Kommentar schreiben

Deine E-Mailadresse wird nur für Benachrichtigungen und Rückfragen verwendet und wird nicht veröffentlicht.

Benachrichtigungen können jederzeit wieder abbestellt werden.

Bitte tippe die Zahlenkombination "6287" ein, nur dann kann ich deinen Kommentar entgegennehmen.

Bitte fülle dieses Feld nicht aus, nur dann kann ich deinen Kommentar entgegennehmen.