Der Webserver nginx den wir im Artikel nginx als Webserver installieren eingerichtet haben jetzt auch durch den Externen Hostnamen per DDNS aus dem Internet erreichbar ist, soll die Datenübertragung verschlüsselt werden. Dadurch kann der Inhalt der Seiten nicht vom Internetanbieter oder WLAN-Betrieber mitgelesen oder verändert werden. So gab es schon Internetanbieter, die Werbung in fremde Seiten eingefügt haben oder Mobilfunkbetreiber die Inhalte verändern um diese angeblich schneller auszuliefern und dabei Seiten durch diese Optimierungen unbrauchbar gemacht haben.
jessie-backports konfigurieren
Da das Paket von Certbot nicht in der aktuellen Version von Raspbian vorhanden ist, müssen die jessie-backports zu deinen Paketquellen hinzugefügt werden.
GPG-Schlüssel hinzufügen
Die GPG-Schlüssel werden für die neuen Paketquellen benötigt.
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553
jessie-backports hinzufügen
echo "deb http://httpredir.debian.org/debian jessie-backports main contrib non-free" | sudo tee -a /etc/apt/sources.list.d/jessie-backports.list
Da die Liste der Paketquellen aktualisiert wurde, muss noch apt update ausgeführt werden, um die Liste der neuen Pakete der hinzugefügten Quelle zu laden.
sudo apt update
Certbot installieren
Mit dem Certbot können neue Zertifikate kostenlos für HTTPS bei Letsencrypt beantragt und auch regelmässig aktualisiert werden. Da das Aktualisieren per Cronjob automatisch vom Server übernommen wird, musst du nicht mehr auf das Ablaufdatum deiner Zertifikate achten – was leider bei kommerziellen Anbietern immer noch der Fall ist.
sudo apt install -t jessie-backports certbot Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Die folgenden zusätzlichen Pakete werden installiert: python-acme python-certbot python-cffi-backend python-chardet python-configargparse python-configobj python-cryptography python-dnspython python-enum34 python-funcsigs python-idna python-ipaddress python-mock python-ndg-httpsclient python-openssl python-parsedatetime python-pbr python-pkg-resources python-psutil python-pyasn1 python-pyicu python-requests python-rfc3339 python-setuptools python-six python-tz python-urllib3 python-zope.component python-zope.event python-zope.interface Vorgeschlagene Pakete: python-certbot-apache python-certbot-doc python-acme-doc python-configobj-doc python-cryptography-doc python-cryptography-vectors python-enum34-doc python-funcsigs-doc python-mock-doc python-openssl-doc python-openssl-dbg python-psutil-doc doc-base python-socks python-setuptools-doc python-ntlm Die folgenden NEUEN Pakete werden installiert: certbot python-acme python-certbot python-cffi-backend python-chardet python-configargparse python-configobj python-cryptography python-dnspython python-enum34 python-funcsigs python-idna python-ipaddress python-mock python-ndg-httpsclient python-openssl python-parsedatetime python-pbr python-pkg-resources python-psutil python-pyasn1 python-pyicu python-requests python-rfc3339 python-setuptools python-six python-tz python-urllib3 python-zope.component python-zope.event python-zope.interface 0 aktualisiert, 31 neu installiert, 0 zu entfernen und 41 nicht aktualisiert. Es müssen 2.130 kB an Archiven heruntergeladen werden. Nach dieser Operation werden 10,7 MB Plattenplatz zusätzlich benutzt. Möchten Sie fortfahren? [J/n] j …
Konfiguration anpassen
In der folgenden Konfigurationsdatei werden Standardeinstellungen vorgenommen, die sonst jedesmal beim Aufruf vom Certbot übergeben werden müssten. Vergiss nicht, die E-Mail-Adresse in dieser Konfigurationsdatei anzupassen. An diese E-Mail-Adresse werden Nachrichten versendet, falls es Probleme mit der Aktualisierung der Zertifikate gibt oder ein Zertifikat lange nicht aktualisiert wurde, da z.B. der Cronjob ausgefallen ist.
sudo vim /etc/letsencrypt/cli.ini rsa-key-size = 2048 email = username@example.com text = True authenticator = webroot webroot-path = /var/www/letsencrypt staple-ocsp = True agree-tos = True
Da nicht für jeden VHost ein neues Verzeichnis erstellt werden soll um die Zertifikate zu erstellen, wird hier ein gemeinsames Verzeichnis /var/www/letsencrypt für alle VHosts erstellt.
sudo mkdir /var/www/letsencrypt
nginx Konfigurieren
Um dieses Verzeichnis auch für mehrere VHosts verwenden zu können, erstellst du dir am besten ein Snippet für nginx, dass per include in die jeweilige Konfigurationsdatei eingebunden werden kann.
sudo vim /etc/nginx/snippets/letsencrypt.conf location ~ ^/.well-known/acme-challenge { root /var/www/letsencrypt; default_type text/plain; }
Standard VHost entfernen
Dieser VHost wird nicht mehr benötigt, da eine neue Konfigurationsdatei mit einem aussagekräftigen Namen erstellt wird.
sudo rm /etc/nginx/sites-enabled/default
Temporären VHost anlegen
Für die Erstellung des ersten Zertifikats wird ein einfacher VHost benötigt, der nichts weiter können muss als die Authentifizierung von Letsencrypt zu erledigen. Der Name des VHost (hier und in den weiteren Beispielen blar-test.spdns.de) muss natürlich wieder auf deinen Hostnamen geändert werden.
sudo vim /etc/nginx/sites-enabled/blar-test.spdns.de.conf server { include "snippets/letsencrypt.conf"; server_name blar-test.spdns.de; listen 80; listen [::]:80; root /var/www/html; index index.html; location / { try_files $uri $uri/ =404; } }
nginx testen
Mit folgenden Befehl kann die Konfiguration von nginx getestet werden, ohne dass der Server neugestartet werden muss und dieser aufgrund eines kleinen Schreibfehlers nicht mehr erreichbar ist.
sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Konfiguration von nginx neuladen
sudo systemctl reload nginx
Neues Zertifikat per Certbot
Als nächstes wird der Certbot gestartet um ein neues Zertifikat von Letsencrypt zu holen. Im Parameter domain wird der Domainname angegeben für den das Zertifikat erstellt werden soll. In der Ausgabe habe ich hervorgehoben unter welchen Pfad das neue Zertifikat gespeichert wird.
sudo certbot certonly --domain blar-test.spdns.de
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for blar-test.spdns.de
Using the webroot path /var/www/letsencrypt for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0000_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0000_csr-certbot.pem
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/blar-test.spdns.de/fullchain.pem. Your cert
will expire on 2017-08-23. To obtain a new or tweaked version of
this certificate in the future, simply run certbot again. To
non-interactively renew *all* of your certificates, run "certbot
renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
VHost für das Zertifikat anpassen
Der komplette alte Inhalt der Datei wird durch den neuen Inhalt ersetzt. Hier wird jetzt eine Umleitung von HTTP zu HTTPS hinzugefügt, falls der Besucher noch eine alte URL verwendet und die Einstellungen ssl_certificate für das Zertifikat und ssl_certificate_key für den Private-Key mit dem verschlüsselt wird hinzugefügt.
sudo vim /etc/nginx/sites-enabled/blar-test.spdns.de.conf server { server_name blar-test.spdns.de; listen 80; listen [::]:80; rewrite ^ https://$server_name$request_uri? permanent; } server { include "snippets/letsencrypt.conf"; server_name blar-test.spdns.de; listen 443 ssl; listen [::]:443 ssl; ssl_certificate /etc/letsencrypt/live/blar-test.spdns.de/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/blar-test.spdns.de/privkey.pem; root /var/www/html; index index.html; location / { try_files $uri $uri/ =404; } }
Konfiguration von nginx neuladen
Jetzt wird noch einmal getestet ob die Konfigurationsdateien alle korrekt sind und danach kann die Konfiguration neugeladen werden.
sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful sudo systemctl reload nginx
HTTPS testen
Unter dem Hostnamen der im Artikel Externen Hostnamen per DDNS konfigurieren angelegt wurde, kann jetzt getestet werden ob HTTPS und auch die Umleitung von HTTP zu HTTPS funktioniert. Mit dem Schloss in der Adresszeile ist die sichere Verbindung zu deinem Raspberry PI für den Besucher sichtbar.
Falls du noch weitere VHosts für deinen Raspberry PI anlegen möchtest, da du unterschiedliche Seiten bereitstellen willst, muss du nur die Schritte ab Temporären VHost anlegen wiederholen.
Kommentare sind geschlossen.