Zum Inhalt springen

Certbot mit STACKIT DNS verwenden

Diese Anleitung zeigt Ihnen, wie Sie die DNS01 ACME-Challenge mit Certbot nutzen. Sie lernen Folgendes:

  • Einrichtung von Certbot, Nginx und dem STACKIT-Certbot-Plugin auf einem Ubuntu-Server.
  • Erstellung eines Wildcard-Zertifikats für eine Zone.
  • Verweisen eines A-Records auf die Server-IP.
  • Auflösen der Domain zur Anzeige der Webinhalte von Nginx – vollständig SSL-verschlüsselt.
  • Ubuntu-Server:
    • Stellen Sie sicher, dass Sie Zugriff auf einen Ubuntu-Server haben, vorzugsweise mit einer öffentlichen IP für die Erreichbarkeit über das Internet. Obwohl ähnliche Schritte für andere Linux-Distributionen gelten, konzentriert sich diese Anleitung auf Ubuntu.
    • Für dieses Tutorial verwenden wir ein STACKIT Ubuntu VM-Setup basierend auf diesem Tutorial. Stellen Sie sicher, dass Port 22 (SSH), Port 80 (HTTP-Verkehr) und Port 443 (SSL-Verkehr) in den Einstellungen der Security Group geöffnet sind.
  • STACKIT DNS Zone: Verfügen Sie über eine konfigurierte Zone, wie zum Beispiel certbot.runs.onstackit.cloud für diese Anleitung.
  • Erforderliche Zugangsdaten: Ein dedizierter Service Account und ein entsprechender Authentifizierungstoken sind für den Deployment-Prozess erforderlich. Certbot wird programmatisch einen temporären TXT-Record in der DNS-Zone erstellen und löschen, wofür der Service Account Berechtigungen auf Projektmitglieder-Ebene benötigt.
  1. Ermitteln Sie die IP-Adresse des Servers.

    Terminal-Fenster
    wget -qO- ifconfig.schwarz | xargs echo

    Sie erhalten eine Ausgabe wie diese:

    193.148.162.182

    Ab hier geht die Anleitung davon aus, dass die IPv4-Adresse Ihres Servers 193.148.162.182 lautet. Ersetzen Sie diese Adresse durch die individuelle IPv4-Adresse Ihres Servers.

  2. Konfigurieren Sie einen A-Record.

    Richten Sie einen Wildcard-A-Record ein, der auf die IP-Adresse Ihres Servers verweist. Dies stellt sicher, dass jeder nachfolgende Record in der Zone auf den Ubuntu-Server auflöst, was den Nutzen des Wildcard-Zertifikats verdeutlicht. Erstellte A-Records im Portal

  3. Nginx installieren

    Installieren Sie Nginx mit apt:

    Terminal-Fenster
    sudo apt update
    sudo apt install nginx

    Bestätigen Sie, dass Nginx läuft:

    Terminal-Fenster
    curl [http://193.148.162.182](http://193.148.162.182)

    Wenn alles funktioniert, erhalten Sie eine Ausgabe wie diese:

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    ...

    Nginx auf Ubuntu 22.04 liefert Dokumente standardmäßig aus /var/www/html aus. Für mehrere Websites ist es besser, separate Verzeichnisse zu haben. Anstatt /var/www/html zu ändern, werden wir eine separate Struktur einrichten.

  4. Verzeichnisse erstellen

    Erstellen Sie ein Verzeichnis für app.certbot.runs.onstackit.cloud:

    Terminal-Fenster
    sudo mkdir -p /var/www/app.certbot.runs.onstackit.cloud/html

    Erstellen und bearbeiten Sie die index.html:

    Terminal-Fenster
    sudo vi /var/www/app.certbot.runs.onstackit.cloud/html/index.html

    Sie erhalten eine Ausgabe wie die folgende:

    <html>
    <head>
    <title>Welcome to app.certbot.runs.onstackit.cloud!</title>
    </head>
    <body>
    <h1>Success!</h1>
    </body>
    </html>
  5. Nginx Server Block Konfiguration

    Erstellen Sie einen neuen Server Block:

    Terminal-Fenster
    sudo vi /etc/nginx/sites-available/app.certbot.runs.onstackit.cloud

    Fügen Sie die entsprechende Konfiguration ein. Stellen Sie sicher, dass Sie das richtige Verzeichnis und den richtigen Domainnamen gesetzt haben.

    server {
    listen 80;
    listen [::]:80;
    # ssl block will be needed later
    # listen 443 ssl;
    # ssl on;
    # ssl_certificate /etc/letsencrypt/live/certbot.runs.onstackit.cloud/fullchain.pem;
    # ssl_certificate_key /etc/letsencrypt/live/certbot.runs.onstackit.cloud/privkey.pem;
    root /var/www/app.certbot.runs.onstackit.cloud/html;
    index index.html index.htm index.nginx-debian.html;
    server_name app.certbot.runs.onstackit.cloud www.app.certbot.runs.onstackit.cloud;
    location / {
    try_files $uri $uri/ =404;
    }
    }

    Aktivieren Sie die neue Konfiguration:

    Terminal-Fenster
    sudo ln -s /etc/nginx/sites-available/app.certbot.runs.onstackit.cloud /etc/nginx/sites-enabled/

    Validieren Sie die Nginx-Konfigurationen:

    Terminal-Fenster
    sudo nginx -t

    Wenn keine Fehler auftreten, starten Sie Nginx neu:

    Terminal-Fenster
    sudo systemctl restart nginx
  6. Testen

    Rufen Sie http://app.certbot.runs.onstackit.cloud/ in Ihrem Browser auf. Wenn dies erfolgreich ist, sollten Sie die Website sehen, die Sie gerade eingerichtet haben. Zugriff auf den Webserver

  7. Certbot installieren

    Bisher ist unsere Verbindung ungesichert. Um die Sicherheit zu erhöhen, werden wir Certbot in Verbindung mit dem STACKIT-Plugin einsetzen.

    Terminal-Fenster
    sudo apt install python3 python3-venv
    sudo python3 -m venv /opt/certbot/
    sudo /opt/certbot/bin/pip install --upgrade pip
    sudo /opt/certbot/bin/pip install certbot certbot-dns-stackit
    sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
  8. Authentifizierungs-Zugangsdaten einrichten

    Damit Certbot eigenständig einen TXT-Record in der Zone erstellen kann, ist eine Authentifizierung erforderlich. Erstellen Sie einen neuen oder verwenden Sie einen vorhandenen Service Account Key und laden Sie die Service Account JSON-Datei herunter, zum Beispiel service-account.json. Wenn Sie einen bereitgestellten Private Key verwenden, muss dieser zur Datei service-account.json hinzugefügt werden:

    {
    "id": "*SERVICE_ACCOUNT_KEY_ID*",
    "publicKey": "*PUBLIC_KEY*",
    "createdAt": "2025-12-09T07:51:11.569+00:00",
    "keyType": "USER_MANAGED",
    "keyOrigin": "*GENERATED*",
    "keyAlgorithm": "RSA_2048",
    "active": true,
    "credentials": {
    "kid": "*SERVICE_ACCOUNT_KEY_ID*",
    "iss": "*SERVICE_ACCOUNT_EMAIL*",
    "sub": "*SERVICE_ACCOUNT_ID*",
    "aud": "[https://stackit-service-account-prod.apps.01.cf.eu01.stackit.cloud](https://stackit-service-account-prod.apps.01.cf.eu01.stackit.cloud)",
    "privateKey": "*PRIVATE_KEY*"
    }
    }

    Falls ein Private Key bereitgestellt wurde, enthält die service-account.json den privateKey nicht. Der Private Key kann mit dem folgenden Befehl hinzugefügt werden (private-key.pem enthält Ihren bereitgestellten Private Key, service-account.json ist die heruntergeladene Service Account JSON-Datei ohne den Private Key):

    Terminal-Fenster
    jq ". | .credentials.privateKey = \"$(cat private-key.pem | sed 's/$/\\n/g' | tr -d '\n')\"" service-account.json > service-account-with-private-key.json
  9. Wildcard-Zertifikat erstellen

    Erstellen Sie ein Wildcard-Zertifikat für Ihre Zone:

    Terminal-Fenster
    sudo certbot certonly \
    --authenticator dns-stackit \
    --dns-stackit-project-id \ # Ihre Projekt-ID
    --dns-stackit-service-account ./service-account.json \ # Ihre Service Account JSON
    --dns-stackit-propagation-seconds 300 \
    --server [https://acme-v02.api.letsencrypt.org/directory](https://acme-v02.api.letsencrypt.org/directory) \
    --agree-tos \
    -d 'certbot.runs.onstackit.cloud' \
    -d '*.certbot.runs.onstackit.cloud'

    Sobald der Befehl ausgeführt wird, beginnt Certbot mit der Erstellung eines temporären TXT-Records innerhalb der angegebenen Zone: Certbot hat temporäre TXT-Records erstellt

  10. Record-Propagierung

    Wenn die Propagierung erfolgreich ist, wird Certbot den temporären Record wieder entfernen. Warten Sie, bis der Vorgang abgeschlossen ist, was bis zu 300 Sekunden oder länger dauern kann. Ein erfolgreiches Ergebnis wird mit einer entsprechenden Meldung angezeigt:

    Successfully received certificate.
    Certificate is saved at: /etc/letsencrypt/live/certbot.runs.onstackit.cloud/fullchain.pem
    Key is saved at: /etc/letsencrypt/live/certbot.runs.onstackit.cloud/privkey.pem
    This certificate expires on 2023-12-26.
    These files will be updated when the certificate renews.
    NEXT STEPS:
    - The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See [https://certbot.org/renewal-setup](https://certbot.org/renewal-setup) for instructions.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    If you like Certbot, please consider supporting our work by:
    * Donating to ISRG / Let's Encrypt: [https://letsencrypt.org/donate](https://letsencrypt.org/donate)
    * Donating to EFF: [https://eff.org/donate-le](https://eff.org/donate-le)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Sie können das Vorhandensein des Zertifikats auf der Maschine mit folgendem Befehl bestätigen:

    Terminal-Fenster
    sudo certbot certificates

    Sie erhalten eine Ausgabe wie diese:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Found the following certs:
    Certificate Name: certbot.runs.onstackit.cloud
    Serial Number: 3e826ad25e4a1ef87e91cfd1d34979bf412
    Key Type: ECDSA
    Domains: certbot.runs.onstackit.cloud *.certbot.runs.onstackit.cloud
    Expiry Date: 2023-12-26 13:23:19+00:00 (VALID: 90 days)
    Certificate Path: /etc/letsencrypt/live/certbot.runs.onstackit.cloud/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/certbot.runs.onstackit.cloud/privkey.pem
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  11. SSL für Nginx aktivieren

    Entfernen Sie die Kommentierung der zuvor auskommentierten SSL-Konfiguration in der Nginx-Konfigurationsdatei, um SSL zu aktivieren:

    Terminal-Fenster
    sudo vi /etc/nginx/sites-available/app.certbot.runs.onstackit.cloud

    Sie erhalten eine Ausgabe wie die folgende:

    server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/certbot.runs.onstackit.cloud/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/certbot.runs.onstackit.cloud/privkey.pem;
    root /var/www/app.certbot.runs.onstackit.cloud/html;
    index index.html index.htm index.nginx-debian.html;
    server_name app.certbot.runs.onstackit.cloud www.app.certbot.runs.onstackit.cloud;
    location / {
    try_files $uri $uri/ =404;
    }
    }

    Nachdem die Änderungen vorgenommen wurden, starten Sie Nginx neu, um die aktualisierte Konfiguration anzuwenden:

    Terminal-Fenster
    sudo systemctl restart nginx
  12. Testen der sicheren Verbindung

    Da das Zertifikat nun installiert ist, rufen Sie https://app.certbot.runs.onstackit.cloud/ in Ihrem Browser auf. Die Verbindung sollte SSL-verschlüsselt sein, was ein sicheres Surferlebnis gewährleistet. Der Browser zeigt nun das Schloss-Symbol