SSLmentor

Hochwertige TLS/SSL-Zertifikate für Websites und Internetprojekte.

Certbot

Certbot

ACME-Client Certbot

Eine ausführliche Anleitung für die vollständige Bereitstellung eines DV-ACME-SSL-Zertifikats auf einem Debian-VPS (Apache) mit automatischer Erneuerung über den Standard-Certbot-Timer. Die Anleitung beschreibt die Bereitstellung eines Single-Domain- oder Multi-Domain-DV-Zertifikats, zum Beispiel example.com und www.example.com. Für Standardbereitstellungen empfehlen wir die Verwendung des Standard-Certbot-Verzeichnisses /etc/letsencrypt. Auf diese Weise werden Erneuerungen vom Standard-System-Timer certbot.timer übernommen.
Diese Anleitung behandelt keine Wildcard-WildCard-SSL-Zertifikate, die eine DNS-Validierung und eine DNS-API für die automatische Erneuerung erfordern.

Grundbegriffe

  • ACME – Protokoll für die automatisierte Ausstellung und Erneuerung von SSL/TLS-Zertifikaten.
  • Certbot – Ein ACME-Client, der mit der Zertifizierungsstelle kommuniziert und ein Zertifikat auf Apache bereitstellen kann.
  • kid + hmac – External Account Binding (EAB)-Anmeldedaten von der Zertifizierungsstelle. Sie verknüpfen Certbot mit einem Konto oder Produkt.
    kid und hmac überprüfen nicht den Domainbesitz, sie binden den ACME-Client an ein CA-Konto. Die Domain wird separat über eine ACME-Challenge überprüft. hmac ist ein sensibler Wert – geben Sie ihn nicht öffentlich weiter und speichern Sie ihn nicht in gemeinsam genutzten Anleitungen.
  • http-01 – Domain-Validierung über eine temporäre Datei, die unter der HTTP-Adresse der Domain erreichbar ist.
  • dns-01 – Validierung über einen DNS-TXT-Eintrag. Erforderlich für Wildcard-Zertifikate.

Ersetzen Sie in den Beispielen example.com durch Ihre eigene Domain.

Apache, webroot

Grundlegende Apache- und Domain-Konfiguration auf dem Server.

›› Abschnitt anzeigen/ausblenden

Erstellen eines separaten webroot für die Domain und einer einfachen Testseite. Apache auf Debian verwendet standardmäßig den Benutzer www-data.

apt update
apt install -y apache2
systemctl enable --now apache2
a2enmod rewrite headers ssl
systemctl reload apache2
Befehl Was er bewirkt
apt update Aktualisiert die Paketliste aus den Debian-Repositorys.
apt install -y apache2 Installiert den Apache-Webserver. Der Parameter -y bestätigt die Installation automatisch.
systemctl enable --now apache2 Aktiviert Apache beim Serverstart und startet ihn sofort.
a2enmod rewrite headers ssl Aktiviert gängige Apache-Module für Weiterleitungen, Header und HTTPS.
systemctl reload apache2 Lädt die Apache-Konfiguration neu, ohne den Dienst vollständig neu zu starten.

Vorbereiten des webroot

DOMAIN="example.com"

mkdir -p /var/www/$DOMAIN/public
chown -R www-data:www-data /var/www/$DOMAIN
chmod -R 755 /var/www/$DOMAIN
echo "OK $DOMAIN" > /var/www/$DOMAIN/public/index.html

Erstellen eines virtuellen Apache-Hosts


cat > /etc/apache2/sites-available/$DOMAIN.conf <<EOF
<VirtualHost *:80>
    ServerName $DOMAIN
    ServerAlias www.$DOMAIN

    DocumentRoot /var/www/$DOMAIN/public

    <Directory /var/www/$DOMAIN/public>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog \${APACHE_LOG_DIR}/${DOMAIN}_error.log
    CustomLog \${APACHE_LOG_DIR}/${DOMAIN}_access.log combined
</VirtualHost>
EOF
            

Aktivieren der Apache-Site und HTTP-Prüfung
Vor der Ausstellung des Zertifikats muss die Domain per HTTP antworten. Dies ist für die ACME-http-01-Validierung erforderlich.

a2ensite $DOMAIN.conf
apache2ctl configtest
systemctl reload apache2

curl -I http://$DOMAIN
curl http://$DOMAIN

Certbot installieren + ein Zertifikat ausstellen

Installation von Certbot aus den Debian-Repositorys. Das Paket python3-certbot-apache ermöglicht Certbot, die Apache-Konfiguration zu ändern, die Validierung durchzuführen und das ausgestellte Zertifikat bereitzustellen.

apt install -y certbot python3-certbot-apache
certbot --version

Certbot unterstützt eine breite Palette von Systemen und Webservern. Wir empfehlen, die Certbot Instructions für das konkrete Vorgehen bei Ihrem gewählten Webserver zu prüfen.

Registrierung des ACME-Kontos

Um ein Zertifikat auszustellen, müssen Sie ein ACME-Konto bei der Zertifizierungsstelle haben. In dieser Anleitung verwenden wir ACME-Zertifikate der CA Certum.
Die EAB-Anmeldedaten (kid + hmac) erhalten Sie in den Bestelldetails.

certbot register \
--server https://acme.certum.pl/directory \
--email certum@example.com \
--agree-tos \
--eab-kid 'KID' \
--eab-hmac-key 'HMAC'
Parameter Bedeutung
--server Gibt den konkreten ACME-Endpunkt an. Ohne diesen Parameter würde Certbot den Standard-ACME-Server verwenden.
CA DigiCert: https://one.digicert.com/mpki/api/v1/acme/v2/directory
CA Sectigo: https://acme.sectigo.com/v2/DV
--email Kontakt-E-Mail für das ACME-Konto.
--agree-tos Zustimmung zu den Nutzungsbedingungen.
--eab-kid KID-Kennung.
--eab-hmac-key Geheimer HMAC-EAB-Schlüssel.

Ausstellen eines ACME-Zertifikats

certbot --apache \
--server https://acme.certum.pl/directory \
--cert-name $DOMAIN \
-d $DOMAIN \
-d www.$DOMAIN

Der Parameter --cert-name ist besonders wichtig, wenn mehrere Zertifikate auf einem Server verwaltet werden. Jedes einzelne Zertifikat sollte einen eigenen eindeutigen Namen haben.

Überprüfen des Zertifikats und automatische Erneuerung

certbot certificates
systemctl list-timers | grep certbot
certbot renew --dry-run
curl -I https://$DOMAIN
Befehl Zweck
certbot certificates Zeigt die von Certbot verwalteten Zertifikate an.
systemctl list-timers | grep certbot Überprüft, ob der Standard-Timer für die automatische Erneuerung läuft.
certbot renew --dry-run Simuliert die Erneuerung des Zertifikats, ohne das Produktivzertifikat zu ersetzen. Korrekte Ausgabe: "all simulated renewals succeeded".
curl -I https://$DOMAIN Überprüft die HTTPS-Antwort der Domain.

Mehrere Zertifikate auf einem Server

Certbot kann mehrere Zertifikate im Standardverzeichnis /etc/letsencrypt verwalten. Dieses Modell ist für Kundenbereitstellungen am einfachsten, da es den Standard-certbot.timer verwendet.

  • Erstellen Sie einen separaten Apache-vhost
    Jede Domain sollte eine eigene Datei in /etc/apache2/sites-available/ und einen eigenen webroot haben.
  • Stellen Sie ein Zertifikat mit einem eindeutigen --cert-name aus
    Verwenden Sie nicht denselben Zertifikatsnamen für ein anderes einzelnes Zertifikat.
  • Überprüfen Sie die Erneuerung aller Zertifikate
    Der Befehl certbot renew --dry-run muss für alle Einträge in /etc/letsencrypt/renewal/ erfolgreich sein.

Beispielbefehl für eine zusätzliche Domain example.net:


DOMAIN="example.net"

mkdir -p /var/www/$DOMAIN/public
chown -R www-data:www-data /var/www/$DOMAIN
chmod -R 755 /var/www/$DOMAIN
echo "OK $DOMAIN" > /var/www/$DOMAIN/public/index.html

cat > /etc/apache2/sites-available/$DOMAIN.conf <<EOF
<VirtualHost *:80>
    ServerName $DOMAIN
    ServerAlias www.$DOMAIN

    DocumentRoot /var/www/$DOMAIN/public

    <Directory /var/www/$DOMAIN/public>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog \${APACHE_LOG_DIR}/${DOMAIN}_error.log
    CustomLog \${APACHE_LOG_DIR}/${DOMAIN}_access.log combined
</VirtualHost>
EOF

a2ensite $DOMAIN.conf
apache2ctl configtest
systemctl reload apache2
curl -I http://$DOMAIN

certbot --apache \
--server https://acme.certum.pl/directory \
--cert-name $DOMAIN \
-d $DOMAIN
-d www.$DOMAIN

certbot renew --dry-run
        

Workaround für mehrere EAB-Konten

Bei der Zertifizierungsstelle kann jedes Produkt eigene EAB-Werte haben. Wenn auf dem Server bereits ein CA-ACME-Konto registriert ist, kann eine weitere Registrierung für denselben ACME-Server zu einem Fehler führen:

There is an existing account; registration of a duplicate account with this command is currently unsupported.

Bleiben Sie in einer solchen Situation im Standardverzeichnis /etc/letsencrypt, registrieren Sie das neue Konto jedoch mit dem folgenden Workaround. Verwenden Sie nach der Ausstellung das konkrete --account ACCOUNT_ID.

Vorübergehendes Verschieben bestehender Konten
ACME_ACCOUNT_DIR="/etc/letsencrypt/accounts/acme.certum.pl/directory"
BACKUP_DIR="/root/certbot-certum-accounts-backup-$(date +%Y%m%d-%H%M%S)"

mkdir -p "$BACKUP_DIR"
find "$ACME_ACCOUNT_DIR" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$BACKUP_DIR"/ \;
Registrieren eines neuen EAB-Kontos
certbot register \ --server https://acme.certum.pl/directory \ --email certum@example.com \ --agree-tos \ --eab-kid 'KID' \ --eab-hmac-key 'HMAC'
Ermitteln der neuen Konto-ID
ls -1 "$ACME_ACCOUNT_DIR"

Die Ausgabe dieses Befehls ist die neue ACCOUNT_ID. Verwenden Sie diesen Wert bei der Ausstellung des Zertifikats.

Wiederherstellen der ursprünglichen Konten
find "$BACKUP_DIR" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$ACME_ACCOUNT_DIR"/ \;
Ausstellen eines Zertifikats über ein bestimmtes Konto
certbot --apache \ --server https://acme.certum.pl/directory \ --account ACCOUNT_ID \ --cert-name example.net \ -d example.net \ -d www.example.net
Warum der Workaround nötig ist Was er löst
Certbot verweigert die Registrierung eines doppelten Kontos für denselben ACME-Server. Das vorübergehende Verschieben der Konten ermöglicht die Registrierung eines neuen EAB-Kontos.
Das Standardverzeichnis /etc/letsencrypt sollte auf dem Server bleiben. Der Standard-certbot.timer erneuert dann alle Zertifikate ohne eigenen Cron.
Jedes CA-Produkt kann eine eigene EAB-Bindung haben. Der Parameter --account erzwingt bei der Ausstellung das richtige CA-Konto.
Prüf-Checkliste
  • apache2ctl configtest gibt Syntax OK zurück.
  • curl -I http://example.com antwortet per HTTP.
  • curl -I https://example.com antwortet per HTTPS.
  • certbot certificates zeigt das erwartete Zertifikat an.
  • certbot renew --dry-run läuft ohne Fehler durch.
  • systemctl list-timers | grep certbot zeigt einen aktiven certbot.timer.

Zurück zur Infozentrum
Fehler gefunden oder etwas nicht verstanden? Schreiben Sie uns!

CA Sectigo
CA RapidSSL
CA Thawte
CA GeoTrust
CA DigiCert
CA Certum