ubuntuusers.de

nginx: SSL-Zertifikat verwenden, wenn Dateien vorhanden sind

Status: Ungelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

frechdachs

Anmeldungsdatum:
3. Juni 2013

Beiträge: 120

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

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

frechdachs schrieb:

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.

Wieso erstellst du nicht gleich ein Zertifikat mit Lets Encrypt?

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.

Das ist meines Wissen nicht möglich.

Antworten |