Ihr kennt sicher Let’s Encrypt? Für einen Web Server in meinem Betrieb habe ich kürzlich eine Domain mit einem Let’s Encrypt Zertifikat ausgestattet. Der Web Server läuft bei uns via ein NGINX Reverse Proxy welcher alle Anfragen an einen internen Server weiterleitet. Damit die Let’s Encrypt Zertifikate erstellt werden können, muss folgendes beachtet werden:
Während der Zertifikat Erstellung prüft Let’s Encrypt, dass uns die Domain wirklich gehört, indem diverse Files auf dem Web-Server abgelegt werden, welche dann von Let’s Encrypt abgerufen und geprüft werden. Für genaue Details schaut euch doch mal diesen Beitrag an. Die Let’s Encrypt Zertifikate sind bei uns auf dem Reverse Proxy abgelegt, Verbindung zum Backend Server ist dann über ein Self-Signed Zertifikat gesichert. Damit die Let’s Encrypt Validierung funktioniert, dürfen nicht alle Anfragen an den Backend Server weitergeleitet werden. Mit der folgenden NGINX Konfiguration konnte ich die Let’s Encrypt Zertifikate ausstellen:
server { listen ipv4_address:80; listen [ipv6_address]:80; server_name domainname.tld www.domainname.tld location /.well-known { root /var/www/html; } location / { rewrite ^ https://$server_name$request_uri? permanent; } }
Man beachte die /.well-known Location Directive welche für Let’s Encrypt verwendet wird. Darin werden die zu prüfenden Files für Let’s Encrypt abgelegt. (Siehe Let’s Encrypt Dokumentation)
Das Zertifikat wird dann mit:
./letsencrypt-auto certonly --webroot -w /var/www/html -d domainame.tld -d www.domainname.tld
erstellt.
Let’s Encrypt bietet alternativ auch ein Standalone Mode an, dafür muss aber kurzzeitig der bestehende NGINX Reverse Proxy gestoppt werden (deshalb habe ich das bei uns nicht so gelöst)