NGINX SSL Zertifikat installieren
Im letzten Tutorial haben wir einen Nginx Verzeichnisschutz angelegt. Nun möchte ich euch im Anschluss noch zeigen wie man ein SSL Zertifikat für den Nginx Webserver konfiguriert. Das geht im fast genau so wie beim Apache Webserver.
NGINX SSL Zertifikat installieren
Mit einem Nginx SSL Zertifikat sichert man seinen Webserver durch verschlüsselte HTTPS Datenübertragung perfekt ab. Die übertragenen Daten werden nun End zu End verschlüsselt und sind von dritten nicht einsehbar. Das garantiert maximale Sicherheit für jeden Kunden der die Webseite oder das Webservice nutzt. Ein SSL Zertifikat kann man zwar selbst erstellen, ein Webbrowser zeigt dann aber eine Warnung an. Um das zu vermeiden muss man sich ein verifiziertes Zertifikat von einer externen Stelle kaufen. Falls man das Service von Let’s Encrypt verwendet funktioniert das aber auch gratis.
Konfiguration
Wie auch schon beim letzten Tutorial bearbeiten wir die nginx.conf Datei. Diese findet man an unterschiedlichen Verzeichnissen (je nach Betriebssystem und Distribution), üblicherweise unter /etc/nginx. Eine übliche Konfiguration für eine durch SSL abgesicherte Webseite sieht wie folgt aus:
server { listen 192.168.0.1:443 ssl; ssl on; ssl_certificate_key /usr/local/etc/tls/mein_private.key; ssl_certificate /usr/local/etc/tls/mein_ssl_zertifikat.crt; server_name raspberrypiwebserver; auth_basic "Restricted"; auth_basic_user_file /usr/local/etc/nginx/.htpasswd; ... }
Unter dem listen Befehl haben wir die lokale IP Adresse angegeben. Wichtig ist die Angabe des Ports 443 und ssl. Ungesicherte HTTP Webseiten haben dort Port 80 stehen. D.h. Falls man nur HTTPS braucht ersetzt man den Eintrag mit Port 80, ansonsten erstellt man einen zweiten server Eintrag um HTTP und HTTPS zu nutzen.
Die folgenden drei Zeilen sind eigentlich immer die selben. Wir schalten mit „ssl on“ die SSL Verschlüsselung ein. Danach müssen wir sowohl den Zertifikats Schlüssel als auch das Zertifikat angeben. Der Zertifikats Schlüssel ist ein selbst erstellter Private Key, mit dem man das Zertifikat beantragt hat –> siehe dazu mein CSR Tutorial und wie man das damit erhaltene Zertifikat installiert. Die Konfigurationsdatei mein_private.key enthält einen privaten Schlüssel. Die *.key Datei beginnt dabei immer mit:
-----BEGIN PRIVATE KEY-----
und endet mit
-----END RSA PRIVATE KEY-----
mein_ssl_zertifikat.crt enthält das Zertifikat, das man vom Zertifikatsanbieter erhält. Der Inhalt von dieser *.crt Datei beginnt immer mit
-----BEGIN CERTIFICATE-----
und endet mit
-----END CERTIFICATE-----
Änderungen übernehmen
Nginx kann die geänderte Konfiguration ohne Neustart sofort im laufenden Betrieb übernehmen. Das funktioniert auf der Kommandozeile mit folgendem Befehl:
nginx -s reload
Es wird auf der Kommandozeile eine entsprechende Erfolgsmeldung ausgegeben. Danach kann man das neue Zertifikat sofort über den Browser testen. Sollte man eine Fehlermeldung bekommen, dann läuft der Webserver ohne Probleme mit der alten Konfiguration weiter. Die Fehlermeldung gibt Auskunft darüber, was man falsch gemacht hat.
Probleme
Eine Fehlermeldung die ich bekommen habe war die folgende: SSL: error:0906D06C:PEM routines… Bei diesem Fehler passt der Key nicht zum Zertifikat. Entweder wurde das Zertifikat falsch erstellt oder falsch hineinkopiert. Mit folgenden Schritten sollte man so einen Fehler vermeiden.
- Kopiere das Zertifikat in einen Texteditor und prüfe ob keine zusätzlichen Leerzeichen mitkopiert wurden.
- Die erste und letzte Zeile des Zertifikats muss durch ein durch — eingeschlossene Zeichenkette bestehen.
- Jede Zeile vom Zertifikat hat genau 64 Zeichen, außer der letzten
Fazit
Ein Nginx SSL Zertifikat ist dank der einfachen Konfiguration am Nginx Webserver sehr einfach umgesetzt. Man kann das auch im laufenden Betrieb durchführen ohne Angst zu haben, dass man durch eine falsche Konfiguration den Webserver abschließt. Nginx gibt zwar kryptische Fehlermeldungen, dank der Google Suche lässt sich aber jedes Problem schnell erkennen und lösen. Der durch HTTPS abgesicherten Webseite steht nichts mehr im Weg!