Let's Encrypt auf einem Cloud Server mit nginx und certbot (certonly) installieren
Einleitung
Will man Let’s Encrypt Zertifikate nutzen, ohne das Certbot die Webserverkonfiguration ändert, muss für die HTTP Challenge der Webserver passend vorbereitet werden.
Voraussetzungen
- Sie verfügen über einen hosting.de Cloud Server, welcher einen gültigen DNS-Eintrag, z.B.
demo.mustermann-domain.de
besitzt. - Eine privilegierte Shell auf dem System.
Pakete installieren
apt update
apt install nginx certbot
Nginx konfigurieren
Ein Verzeichnis für die HTTP Challenges erstellen
mkdir /var/www/letsencrypt
Nginx Snippet zum Einbinden in verschiedenen vhost unter /etc/nginx/snippets/letsencrypt.conf
mit folgendem Inhalt erstellen
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
Konfiguration für den vhost bearbeiten (z.B. unter /etc/nginx/sites-enabled/demo.mustermann-domain.de
)
server {
listen 80;
server_name demo.mustermann-domain.de;
include snippets/letsencrypt.conf;
location / {
return 301 https://$server_name$request_uri;
}
}
Danach die Nginx Konfiguration mit nginx-t
auf Korrektheit prüfen und den Websever neustarten (systemctl restart nginx.service
)
Certbot konfigurieren
Braucht man keine Erinnerungsmail bei auslaufenden Zertifikaten kann man certbot auch ohne Email Adresse betreiben (--register-unsafely-without-email
)
certbot certonly --webroot -w /var/www/letsencrypt/ -d demo.mustermann-domain.de --register-unsafely-without-email
Nachdem certbot fertig ist, mit systemctl list-timers
kontrollieren ob der certbot.timer aktiv ist.
Zertifikate in Nginx einbinden
Hat man noch keine SSL / TLS Zertifikate in Nginx eingebunden, kann man den SSL Configuration Generator von Mozilla als Hilfe verwenden.
Soll die gleiche SSL Konfiguration in mehreren Vhosts verwendet werden bietet sich wieder die Nutzung eines Snipptes an. Hierfür die Datei /etc/nginx/snippets/mozilla-modern.conf
mit folgendem Inhalt erstellen
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000" always;
ssl_stapling on;
ssl_stapling_verify on;
resolver 95.129.51.51;
Jetzt muss noch die Datei /etc/nginx/sites-enabled/demo.mustermann-domain.de
für die Nutzung der Zertifikate erweitert werden
server {
server_name demo.mustermann-domain.de;
include snippets/mozilla-modern.conf;
ssl_certificate /etc/letsencrypt/live/demo.mustermann-domain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/demo.mustermann-domain.de/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/demo.mustermann-domain.de/fullchain.pem;
. . .
}
Danach die Nginx Konfiguration wieder mit nginx-t
auf Korrektheit prüfen und den Websever neustarten (systemctl restart nginx.service
)