nginx: Strong SSL Security on nginx

Beim Prüfen der nginx SSL-Konfiguration bin ich auf folgende Seite gestossen: Raymii.org: Strong SSL Security on nginx. Hier wird ausführlich beschrieben wie man die SSL-Konfiguration seines nginx Webserver stärkt. Eine weitere aktuellere Seite ist: sherbers.de: Sichere TLS Konfiguration mit NGINX.

Prüfen kann man die Konfiguration auf: ssllabs.com

Hat man die wichtigsten Einstellungen vorgenommen, sollte der SSL-Report mindestens eine A Bewertung anzeigen.

SSL-Report Bewertung
SSL-Report “monsterli.ch” Bewertung

 

Nützliche Links:

Raymii.org: Strong SSL Security on nginx

sherbers.de: Sichere TLS Konfiguration mit NGINX

ssllabs.com: SSL Server Test

 

 

NGINX: Command-line parameter -s

Mit dem Command-line paramter “-s” (signal) (ab version >= 0.7.53), kann der laufende Hauptprozess von nginx beeinflusst werden.

Lade die Konfigurationsdateien neu
Dieser Befehl lädt die Konfiguration neu, ohne den Betrieb von nginx
zu beinträchtigen.

nginx -s relaod

Danach werden neue Anfragen mit der neuen Konfiguration bedient.

Beendet nginx sofort

nginx -s stop

Beendet nginx “vorsichtig”

nginx -s quit

Keine neuen Anfragen werden mehr beantwortet, bestehende aber noch bedient.

Nützliche Links
nginx: command-line parameters
Starting, Stopping, and Restarting NGINX

Nginx: Alle http-Anfragen auf https umleiten

Soll eine Webseite nur noch über HTTPS zugänglich sein, müssen alle HTTP-Anfragen auf HTTPS umgeleitet werden. Dies kann bei Nginx mit rewrite oder return gemacht werden. Die Empfehlung der Nginx Community ist aber die Verwendung des return, wie hier in diesem Beispiel:


server {
listen 80;
server_name signup.mysite.com;
return 301 https://signup.mysite.com$request_uri;
}


Nützliche Links
Nginx Community: Pitfalls
Nginx Community: Converting rewrite rules
Server Fault: How to force or redirect to SSL

Kostenloses StartSSL Serverzertifikat einrichten beim NGINX Webserver

Achtung:
Mozilla und Google haben der Zertifizierungsstelle das Vertrauen entzogen, somit werden die meisten StartSSL-Zertifikate nicht mehr als vertrauenswürdig anerkannt. Als eine gute und freie Alternative kann Let’s Encrypt eingesetzt werden.

Zum Installieren eines kostenloses StartSSL-Zertifikates auf einem NGINX Webserver, braucht es folgende Schritte:

  1. Ein Zertifikat bei StartSSL erstellen
  2. Den neu erstellten privaten Schlüssel mit “Copy & Paste” in eine Datei, mit den Namen ssl.key, speichern
  3. Die Datei ssl.key mit einem geeigneten Tool, beispielsweise WinSCP für Windows Benutzer, auf den Webserver kopieren
  4. Mit Hilfe von OpenSSL muss der private Schlüssel, auf dem Server, entschlüsselt gespeichert werden: openssl rsa -in ssl.key -out server.key
    (Hinweis zur Passworteingabe bei verwendung von Putty: Möchte man nicht die >= 32 Stellige “PEM pass phrase” von Hand abtippen, kann diese mit “shift+Ins” eingefügt werden.)
  5. Wenn das Webseiten-Zertifikat durch StartSSL erstellt wurde, erhält man eine Benachrichtigung und kann das Zertifikat unter: Control Panel-> Tool Box-> Retrieve Certificate beziehen. Dazu wieder mit “Copy & Paste” in eine Datei namens ssl.cert speichern und zum Webserver kopieren
  6. Nach diesem Schritt muss noch ein Gesamtpaket mit den Hilfszertifikaten von StartSSL und dem Webseiten-Zertifikat erstellt werden, da beim NGINX Webserver diese Zertifikate nicht einzeln in der Konfiguration angegeben werden. Die Hilfszertifikate können bei StartSSL heruntergeladen werden. Um das Gesamtpaket zu erstellen, braucht es für die kostenlosen Zertifikate die Dateien ca.pem und sub.class1.server.ca.pem. Mit dem Befehl:
    cat ssl.cert ca.pem sub.class1.server.ca.pem > server.pem
    werden alle Dateien in die Datei server.pem zusammengefasst.
  7. Nun die Dateien “server.pem” und “server.key” in das gewünschte Verzeichnis kopieren. Hier in diesem Beispiel nach “/etc/nginx/cert/”.
  8. Jetzt muss noch die NGINX Konfiguration angepasst werden:
    server {
        listen   443;
        ssl on;
        ssl_certificate /etc/nginx/cert/server.pem;
        ssl_certificate_key /etc/nginx/cert/server.key;
        server_name  www.example.org;
        root /var/www/example;
        location / {
            index  index.html;
        }
    }
  9. Zum Abschluss wird noch ein Neustart von NGINX durchgeführt.(/etc/init.d/nginx restart) Wenn beim Neustart keine Fehlermeldung in der Konsole erscheint, ist das Zertifikat erfolgreich installiert worden.

Hinweis: Sollte NGINX nicht mehr starten und eine ähnliche Fehlermeldung wie:

[emerg]: SSL_CTX_use_certificate_chain_file("/etc/nginx/cert/server.crt") failed (SSL: error:02001002:system library:fopen:No such file or directory error:20074002:BIO routines:FILE_CTRL:system lib error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib)
configuration file /etc/nginx/nginx.conf test failed

in der Konsole angezeigt werden, dann deutet dies auf einen fehlenden Zeilenumbruch in der Datei server.pem hin.

NGINX - Fehler in der server.pem Datei
Fehlender Zeilenumbruch in der .PEM Datei
Einfach den Zeilenumbruch korrigieren und die Datei speichern. Nach der Korrektur sollte NGINX wieder erfolgreich starten.
Zeilenumbruch korrigiert
Zeilenumbruch korrigiert