Ich setze den NGINX ja gerne sowohl als Web Server als auch als Reverse Proxy ein – fast genauso gerne setzte ich mittlerweile die Let´s Encrypt Zertifikate ein.
Ich hab jab hier schon eine Anleitung geschrieben wie man das auf Ubuntu einrichtet – aber mittlerweile mach ich hauptsächlich Server mit Debian – deshalb hier eine kleine Anleitung wie ich das immer unter Debian konfiguriere:
1) Erstellen eines NGINX-Config-Snippet
wir erstellen einen Config-Datei
vim /etc/nginx/snippets/letsencrypt.conf
und dort einfügen (gegebenfalls das Verzeichnis unter root ändern):
location ^~ /.well-known/acme-challenge/ {
default_type „text/plain“;
root /var/www/letsencrypt;
allow all;
}
und mit :wq abspeichern.
2) Anpassen der bestehenden NGINX-Konfig
Ich konfiguriere eigentlich meine Webseiten immer als HTTPS-only – das heißt jede Anfrage auf Port 80 (HTTP) auf 443 (HTTPS) umgeleitet.
Da die Domänen-Verifizierung von Let´s Encrypt über einen HTTP Aufruf gemacht wird, müssen wir allerdings hier eine Ausnahme erstellen.
Dazu passen wir unsere Webseiten Konfig an:
vim /etc/nginx/sites-available/meineseite
und fügen unser Snippet mittels include in dem Serverteil für HTTP hinzu:
server { listen 80; listen [::]:80; server_name www.meineseite.de; include /etc/nginx/snippets/letsencrypt.conf; # Redirect any HTTP request to HTTPS location / { return 301 https://$server_name$request_uri;} error_log /var/log/nginx/meineseite-error.log; access_log /var/log/nginx/meineseite-access.log; }Der Serverteil für HTTPS braucht hier nichts angegeben werden – wir haben ja auch noch keine Zertifikate 😉
3) Installieren des Let´s Encrypt Clients
Installation unter Debian 9 (Stretch):
sudo apt-get install certbot
Installation unter Debian 8 (Jessie):
Bei Debian 8 muss der Client über die Backports installiert werden.
Dazu müssen zuerst die Backports in den Apt-Sources eingetragen werden:
sudo vim /etc/apt/sources.list
und dort die Zeile
deb http://ftp.debian.org/debian jessie-backports main
ans Ende anfügen und mit :wq speichern und den vim verlassen.
Danach die Sources updaten:
sudo apt-get update
und mit
sudo apt-get install certbot -t jessie-backports
4) erstellen des root-Verzeichnises für Let´s Encrypt
sudo mkdir -p /var/www/letsencrypt/.well-known/acme-challenge
Ich vergebe auch noch entsprechende Rechte (meistens läuft der NGINX ja als www-data User bzw. der User ist in der www-data-Gruppe)
sudo chown -R www-data:www-data /var/www/letsencrypt
5) NGINX reload
sudo systemctl reload nginx
6) Let´s Encrypt Client auführen
Jetzt kann der Client ausgeführt werden – hier als Beispiel für die Domänen meineseite.de und www.meineseite.de (mittels -d domain.tld können noch weitere Domains – falls benötigt – hinzugefügt werden)
sudo certbot certonly --webroot -w /var/www/letsencrypt -d meineseite.de -d www.meineseite.dedann gibt man eine Mail-Adresse ein und bestätigt mit A die Lizenz-Bedingungen.
Falls alles geklappt hat werden jetzt die Zertifikate ausgestellt – zu finden sind die Zertifikate unter /etc/letsencrypt/live/www.meineseite.de
7) HTTPS-Konfig am NGINX
Jetzt müssen wir noch die HTTPS-Konfig mit unseren neuen Zertifikaten hinzufügen bzw. anpassen.
vim /etc/nginx/sites-available/meineseite
und die Zertifikate im der HTTPS Konfiguration angeben
ssl_certificate /etc/letsencrypt/live/www.meineseite.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.meineseite.de/privkey.pem;mit :wq speichern.
jetzt noch die Konfiguration am NGINX neu laden
systemctl reload nginx
und wir müssten jetzt die Seite mit einem wunderbaren Zertifikat öffnen können 🙂
8) Renew automatisieren
Die Let´s Encrypt Zertifikate haben die Einschränkung, dass sie nur 90 Tage gültig sind. Man kann hier aber über einen cron-job Abhilfe leisten:
sudo crontab -e
und die folgenden Zeilen hinzufügen
30 2 * * 1 certbot renew >> /var/log/le-renew.log
35 2 * * 1 systemctl reload nginxso wird automatisch das Zertifikat verlängert und die Konfig des NGINX aktualisiert
9) fertig 🙂
Quelle: https://certbot.eff.org/
was macht man mit :
Type: unauthorized
Detail: The key authorization file from the server did not match
this challenge
[vyqi_55zrRezBBW4282yRy8hmFXez9IXs464jim0EO0.9tWJ04WclPHsE6tJ8fH-o4oQE_C-dr55xuchHHq3mEI]
!=
[vyqi_55zrRezBBW4282yRy8hmFXez9IXs464jim0EO0.jovWtVw8hQo48B0oVNH2HtMnU6dasUd0_8jh4cxgALE]
Da bräuchte ich noch mehr Infos um helfen zu können…
noobie Frage, aber sollte man „crontab -e“ für jede Domain anlegen?
ich habe z.Z. 5 Domains, habe aber nur ein Cron gemacht…
Hi, er checkt mit dem angegebenen Befehl alle Zertifikate ab und verlängert -> also für alle reicht der eine Cronjob 🙂