Hallo zusammen,
auf einem öffentlich erreichbaren Server setze ich nginx als Webserver ein.
Wenn ich eine Domain (z.B. cloud.example.com) neu aufsetze, dann erstelle ich mir im ersten Schritt für diese Domain ein selbstsigniertes SSL-Zertifikat. In der nginx-Konfiguartion wird dann entsprechend eingebunden:
server { listen 443 ssl; server_name cloud.example.com; ssl_certificate /path/to/cloud.example.com_self_signed.crt; ssl_certificate_key /path/to/cloud.example.com_self_signed.key; [ ... ] }
Das funktioniert problemlos.
Zu einem späteren Zeitpunkt (nachts um 23:00 Uhr) erzeugt ein kleines Script für diese Domain ein offizielles "let's encrypt"-Zertifikat. Ich verwende die "webroot"-Variante. Das hat den Vorteil, dass ich nginx nicht beenden und später wieder neu starten muss. Auch das funktioniert problemlos. Die neuen Pfade muss ich dann in der Konfiguration anpassen:
server { listen 443 ssl; server_name cloud.example.com; #ssl_certificate /path/to/cloud.example.com_self_signed.crt; #ssl_certificate_key /path/to/cloud.example.com_self_signed.key; ssl_certificate /etc/letsencrypt/live/cloud.example.com.crt; ssl_certificate_key /etc/letsencrypt/live/cloud.example.com.key; [ ... ] }
Nun habe ich mir überlegt, ob man das nicht eleganter lösen kann. Ich möchte erreichen, dass nginx prüft, ob die Datei /etc/letsencrypt/live/cloud.example.com.crt vorhanden ist. Falls ja, soll nginx die Zertifikate von "letsencrypt" verwenden. Falls nicht, soll nginx die selbstsignierten Zertifikate verwenden.
Ich habe es mal so versucht:
server { listen 443 ssl; server_name cloud.example.com; # Default-Wert: ssl_certificate /path/to/cloud.example.com_self_signed.crt; ssl_certificate_key /path/to/cloud.example.com_self_signed.key; if (-f /etc/letsencrypt/live/cloud.example.com.crt) { ssl_certificate /etc/letsencrypt/live/cloud.example.com.crt; ssl_certificate_key /etc/letsencrypt/live/cloud.example.com.key; } }
Das funktioniert so leider nicht.
Kann mir jemand von Euch helfen?
Danke und Gruß,
frechdachs