StartSSL: 4096bit SHA2 A+ Zertifikate für NGINX
Aus gegebenen Anlass habe ich mich dazu entschlossen, ein Beitrag zu diesem Thema zu schreiben.
Es soll darum gehen, wie man sich bei StartSSL ein gültiges Zertifikat anfordern kann und dieses im NGINX konfiguriert.
Generieren von 4096 Bit SHA2 Key + Erzeugung von Request File:
Als Erstes generieren wir unser 4096 Bit SHA2 Keyfile example.org.key
und dessen dazugehöriges Request File example.org.csr
.
Das Keyfile ist das Herz unserer SSL/TLS Verschlüsslung und darf deshalb niemals in fremde Hände geraten!
openssl req -nodes -newkey rsa:4096 -sha256 -keyout example.org.key -out example.org.csr
(Es können alle nachfolgenden Abfragen mit Enter bestätigt werden, da diese bei StartSSL nicht berücksichtigt werden.)
Wir setzen die Berechtigung am besten auf chmod 600 example.org.key
.
Somit ist unser Schlüssel nur für unseren User lesbar.
Einreichen von Certificate Signing Request file:
Im nächsten Schritt müssen wir unser example.org.csr
Request File bei StartSSL einreichen. StartSSL bietet uns hier zwar die Möglichkeit uns unseren Privat Key zu erstellen. Das sollten wir jedoch, wie wir eben gelernt haben, niemals machen.
Oder gibst du wildfremden Menschen deinen Hausschlüssel?
Wir überspringen somit diesen Punkt und importieren unser zuvor selbst erstelltes Request File.
Wir werden anschließend nach einer Sub-Domain gefragt. Dort tragen wir, wenn wir ausschließlich für example.org
ein Zertifikat ausstellen möchten, www
ein.
Nach Abschluss können wir uns unser Zertifikat im ZIP Bundel herunterladen. (Wir benötigen ausschließlich die Datei im Unterordner NGINX)
Dieses Zertifikat öffnen wir in einem Editor, löschen das unterste Zertifikat heraus und speichern das Zertifikat als ssl.crt (Aus Gründen die mir nicht bekannt sind, verteilt StartSSL hier das falsche Intermediate Zertifikate wodurch wir händisch nacharbeiten müssen)
Herunterladen von Intermediate Zertifikate:
Anschließend benötigen wir das richtige StartCom Class 1 DV Server CA(pem)(SHA-2)
File von startssl.
Dieses downloaden wir uns hier https://www.startssl.com/certs/sca.server1.crt
oder: https://www.startssl.com/root, unter Intermediate CA Certificates/StartCom Class 1 DV Server CA(pem)(SHA-2)
Wir haben jetzt alle Zertifikate und kommen zur eigentlichen Konfiguration des NGINX web Servers.
Aneinanderhängen von Public Keys
Bevor NGINX mit unseren Zertifikaten etwas anfangen kann, müssen wir unser ssl.crt
und das
(Intermediate CA Certificates)sca.server1.crt
von StartSSL zusammenfügen. Das machen wir mit
cat ssl.crt sca.server1.crt > ssl-unified.crt
.
Das erstellte ssl-unified.crt
ist absofort unser Public Key für NGINX
Erstellung von Diffie-Hellman Parameters:
openssl dhparam -out dhparam.pem 4096
(wem 4096 Bit zu paranoid erscheint kann auch auf 2048 Bit umstellen)
NGINX SSL Konfiguration
nano /etc/nginx/sites-available/example.org.conf
ssl on;
ssl_certificate /var/www/it-schley.eu/ssl/ssl-unified.crt;
ssl_certificate_key /var/www/it-schley.eu/ssl/it-schley.eu.key;
ssl_dhparam /var/www/it-schley.eu/ssl/dhparam.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1;
ssl_ciphers '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';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security max-age=31536000;
Nach Abschluss der Konfiguration sollte unser Zertifikat eine A+ Bewertung bekommen (Stand 10.10.2015)
Testen kann man das unter https://www.ssllabs.com/ssltest/
Änderung: 14.02.2016
- änderungen von StartSSL eingetragen.