nginx: Zertifikat erneuern

In einer Docker-Installation mit nginx als Reverse Proxy (Alternative zu Traefik bzw. ältere Installationen) hängt das Vorgehen davon ab, ob das Zertifikat mit Certbot von Let’s Encrypt bezogen oder bei einer Zertifizierungsstelle gekauft wurde. Für die Standardinstallation mit Traefik gilt Traefik: Zertifikat erneuern →.


Let’s Encrypt (Certbot)

Dieser Abschnitt gilt, wenn das Zertifikat nach SSL Zertifikate - Certbot → mit Certbot im Standalone-Modus bezogen wurde.

Es kann vorkommen, dass Certbot aus verschiedenen Gründen kein neues Zertifikat angefordert hat. Die Erneuerung lässt sich auch manuell anstoßen. Dafür muss Port 80 frei sein, nginx wird also für die Dauer der Erneuerung gestoppt:

sudo certbot renew --pre-hook "/usr/bin/docker compose -f /opt/relution/compose.yaml down nginx" --post-hook "/usr/bin/docker compose -f /opt/relution/compose.yaml up --detach nginx"

Bei älteren Installationen mit docker-compose.yml wird der Pfad an die eigene Installation angepasst. Alternativ wird nginx vorher im Verzeichnis der Compose-Datei (standardmäßig /opt/relution) mit sudo docker compose down nginx gestoppt und danach mit sudo docker compose up --detach nginx wieder gestartet. Erst nach dem Neustart liefert nginx das neue Zertifikat aus. Zum Testen kann der Aufruf zunächst mit --dry-run erfolgen.

Nach der Erneuerung zeigt Certbot die vorhandenen Zertifikate mit ihrem Ablaufdatum an:

sudo certbot certificates

Abschließend wird im Browser die Relution-Weboberfläche aufgerufen und über das Schloss-Symbol in der Adressleiste geprüft, ob nginx das neue Zertifikat mit dem neuen Ablaufdatum ausliefert.


Gekauftes Zertifikat

Zertifikatskette (server.pem) und privater Schlüssel (server.key) werden zunächst nach Gekauftes Zertifikat erneuern → vorbereitet. Anschließend werden sie wie folgt in nginx eingebunden.

Dateien ablegen

In einer Docker-Installation mit nginx liegen beide Dateien standardmäßig im Verzeichnis /opt/relution. Vor dem Austausch werden die bisherigen Dateien gesichert, damit bei Problemen auf sie zurückgegriffen werden kann:

cd /opt/relution
sudo cp server.pem server.pem.old
sudo cp server.key server.key.old

Anschließend werden die neuen Dateien server.pem und gegebenenfalls server.key in das Verzeichnis kopiert und die bisherigen dabei überschrieben. Danach wird der private Schlüssel nur für den Besitzer lesbar gemacht:

sudo chmod 600 /opt/relution/server.key

Pfade in der nginx-Konfiguration prüfen

Der nginx-Container liest Zertifikat und Schlüssel aus den Dateien, die in der Compose-Datei eingebunden sind. Bei aktuellen Installationen heißt die Datei compose.yaml (im Verzeichnis /opt/relution), bei älteren Installationen docker-compose.yml. Die Einbindung steht im nginx:-Block unter volumes::

compose.yaml
services:
  …

  nginx:
    image: nginx:stable
    …

    volumes:
      - "/opt/relution/relution-nginx.conf:/etc/nginx/conf.d/relution-nginx.conf"
      - "/opt/relution/server.pem:/etc/nginx/server.pem"
      - "/opt/relution/server.key:/etc/nginx/server.key"

Links vom Doppelpunkt steht der Pfad auf dem Server, rechts der Pfad im Container. Ältere Installationen verwenden relative Pfade wie ./server.pem; die Dateien liegen dann im selben Verzeichnis wie die Compose-Datei.

In der nginx-Konfiguration relution-nginx.conf verweisen die Einträge ssl_certificate und ssl_certificate_key im server-Block für Port 443 auf die Pfade im Container:

relution-nginx.conf
server {
    listen 0.0.0.0:443 ssl default_server;
    …

    ssl_certificate      /etc/nginx/server.pem;
    ssl_certificate_key  /etc/nginx/server.key;
    …
}

Wurden die bisherigen Dateien unter demselben Namen ersetzt, ist keine Änderung erforderlich. Wurden die neuen Dateien unter einem anderen Namen oder an einem anderen Ort abgelegt, wird der Pfad links vom Doppelpunkt in der Compose-Datei entsprechend angepasst.

nginx-Container neu starten

nginx liest Zertifikat und Schlüssel nur beim Start ein. Der Container wird deshalb im Verzeichnis /opt/relution neu gestartet:

cd /opt/relution
sudo docker compose restart nginx

Wurde die Compose-Datei geändert, reicht ein Neustart nicht aus; der Container wird stattdessen mit der geänderten Konfiguration neu erstellt:

sudo docker compose up -d nginx

Startet nginx nicht, zeigen die Logs des Containers die Ursache, z. B. eine fehlerhafte Zertifikatsdatei oder einen nicht passenden Schlüssel:

sudo docker compose logs nginx

In diesem Fall lassen sich die gesicherten Dateien server.pem.old und server.key.old zurückkopieren, bis der Fehler behoben ist.

Abschließend wird im Browser die Relution-Weboberfläche aufgerufen und über das Schloss-Symbol in der Adressleiste geprüft, ob das neue Zertifikat mit dem neuen Ablaufdatum ausgeliefert wird. Ob die Kette vollständig ausgeliefert wird, lässt sich zusätzlich z. B. mit WhatsMyChainCert → prüfen.

Top