|
|
| Zeile 1: |
Zeile 1: |
| == Überblick ==
| |
| [[Let's Encrypt|Let’s Encrypt]] ermöglicht die automatisierte Ausstellung und Erneuerung von TLS-Zertifikaten über das ACME-Protokoll (RFC 8555)
| |
| * Ein ACME-Client weist die Kontrolle über eine Domain nach und ruft ein Zertifikat ab
| |
| * Zertifikate besitzen eine maximale Gültigkeit von 90 Tagen, daher sollte eine automatische Erneuerung konfiguriert werden
| |
|
| |
| == ACME-Client-Implementierungen ==
| |
| Zur Nutzung von Let’s Encrypt muss eine ACME-Clientsoftware eingesetzt werden
| |
| * Es stehen zahlreiche Clients von Drittanbietern zur Verfügung.
| |
| :* Keine Überprüfung oder Zertifizierung dieser Clients durch Let’s Encrypt
| |
| * Browserbasierte Clients werden nicht berücksichtigt, da sie manuelle Erneuerungen fördern
| |
|
| |
| === Certbot ===
| |
| Für die meisten Szenarien wird Certbot empfohlen.
| |
| * Unterstützt automatisiertes Ausstellen, Installieren und Erneuern von Zertifikaten
| |
| * Bietet Auto-Konfiguration sowie Expertenmodus.
| |
| * Umfangreiche Dokumentation und breite Betriebssystemunterstützung
| |
|
| |
| === ACMEv1 / ACMEv2 ===
| |
| Alle unterstützten ACME-Clients verwenden '''ACMEv2 (RFC 8555)'''
| |
| * ACMEv1 wurde am 1. Juni 2021 vollständig abgeschaltet
| |
|
| |
| == Erste Schritte ==
| |
| Zur Aktivierung von HTTPS wird ein Zertifikat benötigt, das über ACME angefordert wird
| |
| * Der Nachweis der Domainkontrolle erfolgt über einen ACME-Client oder über Integrationen beim Hosting-Provider
| |
| * Entscheidend ist, '''ob Shell-Zugang verfügbar ist'''
| |
|
| |
| === Mit Shell-Zugang ===
| |
| Für Shell-Umgebungen wird Certbot empfohlen
| |
| * Unterstützt automatische Abläufe ohne Ausfallzeit
| |
| * Alternativ können weitere ACME-Clients eingesetzt werden
| |
|
| |
| Für Tests kann die Staging-Umgebung genutzt werden, um Rate Limits nicht auszulösen
| |
|
| |
| === Ohne Shell-Zugriff ===
| |
| Optimal ist die Nutzung integrierter Let’s-Encrypt-Unterstützung des Hosting-Providers
| |
| * Zertifikate werden automatisch angefordert und erneuert
| |
|
| |
| Falls keine Integration vorhanden ist, kann ein Zertifikat manuell erzeugt und anschließend beim Provider hochgeladen werden
| |
| * Dieser Ansatz ist aufwendig und muss regelmäßig wiederholt werden. Gilt als Notlösung
| |
|
| |
| == ACME-Challenge-Typen ==
| |
| Für die Domainvalidierung stehen mehrere Verfahren zur Verfügung. Auswahl und Einsatz hängen von Infrastruktur, DNS-Zugriff und Port-Verfügbarkeit ab
| |
|
| |
| {| class="wikitable options big"
| |
| ! Methode
| |
| ! Port
| |
| ! Vorteile
| |
| ! Nachteile
| |
| |-
| |
| | HTTP-01
| |
| | Port 80
| |
| |
| |
| * Einfach einzurichten
| |
| * Kompatibel mit den meisten Webservern
| |
| * Automatisierbar
| |
| |
| |
| * Erfordert offenen Port 80
| |
| * Probleme hinter CDN/Reverse-Proxy möglich
| |
| * Nicht nutzbar für Wildcard-Zertifikate
| |
| |-
| |
| | DNS-01
| |
| | TXT-Record
| |
| |
| |
| * Ermöglicht Ausstellung von Wildcard-Zertifikaten
| |
| * Unabhängig von Ports oder Webserver
| |
| * Sehr flexibel bei komplexen Infrastrukturen
| |
| |
| |
| * Erfordert DNS-API oder manuellen Eingriff
| |
| * DNS-Propagation kann Verzögerungen verursachen
| |
| |-
| |
| | TLS-ALPN-01
| |
| | Port 443
| |
| |
| |
| * Keine Abhängigkeit von Port 80
| |
| * Funktioniert hinter bestimmten Proxies besser
| |
| |
| |
| * Benötigt direkte Kontrolle über TLS-Konfiguration
| |
| * Nicht überall unterstützt
| |
| |}
| |
|
| |
| == Funktionsweise von ACME ==
| |
|
| |
| === Architektur ===
| |
| Der ACME-Ablauf folgt festen Objekten und Schritten:
| |
|
| |
| * '''Account Key''' – kryptografische Identität des Clients
| |
| * '''Order''' – Anforderung eines oder mehrerer Zertifikate
| |
| * '''Authorization''' – Nachweis der Kontrolle für jede Domain
| |
| * '''Challenge''' – konkrete Prüfaufgabe (HTTP-01, DNS-01, TLS-ALPN-01)
| |
| * '''Finalization''' – Übermittlung des CSR
| |
| * '''Certificate''' – Ausstellung des Zertifikats
| |
|
| |
| Diese Struktur entspricht dem ACME-Standard (RFC 8555)
| |
|
| |
| === Domain-Validierung ===
| |
| Der Client erzeugt ein Schlüsselpaar und fordert Validierungsaufgaben an.
| |
| * Nach Bereitstellung der Challenge-Ressourcen prüft die Zertifizierungsstelle deren Erfüllung.
| |
| * Bei Erfolg gilt der Account Key als autorisiert.
| |
|
| |
| === Zertifikatausstellung und Widerruf ===
| |
| Zur Ausstellung wird eine Zertifikatsanforderung (CSR) übermittelt
| |
| * Nach erfolgreicher Prüfung wird ein Zertifikat zurückgegeben
| |
| * Widerrufe erfolgen über signierte Widerrufsanfragen
| |
| * Entsprechende Informationen werden über die üblichen Kanäle publiziert
| |
|
| |
| == Rate Limits ==
| |
| Let’s Encrypt setzt verschiedene Beschränkungen ein, um Missbrauch zu verhindern. Für einen stabilen Betrieb sollte die automatisierte Erneuerung auf die Staging-Umgebung getestet werden.
| |
|
| |
| Limits:
| |
| * Begrenzte Anzahl neuer Zertifikate pro registrierter Domain pro Woche.
| |
| * Begrenzung fehlerhafter Validierungsversuche pro Stunde.
| |
| * Begrenzte Anzahl neuer Orders pro Account innerhalb kurzer Zeiträume.
| |
|
| |
| Für Tests steht eine Staging-Umgebung mit deutlich höheren Limits zur Verfügung.
| |
|
| |
| ; Staging-Umgebung
| |
| Die Staging-Umgebung ist eine separate ACME-Testinfrastruktur mit hohen Limits und nicht vertrauenswürdigen Testzertifikaten. Sie dient zur sicheren Überprüfung von Validierung, Konfiguration und Automatisierung, ohne produktive Limits zu belasten.
| |
|
| |
| ; Aktivierung der Staging-Umgebung
| |
| Die Nutzung erfolgt über den Staging-ACME-Endpunkt oder entsprechende Client-Optionen:
| |
|
| |
| * Certbot: ''--staging''
| |
| * ACME-Endpoint:
| |
| <syntaxhighlight lang="ini" copy line>
| |
| https://acme-staging-v02.api.letsencrypt.org/directory
| |
| </syntaxhighlight>
| |
| * Certbot-Erneuerungstest: ''certbot renew --dry-run''
| |
|
| |
| == Beste Praxis ==
| |
| * Port 80 sollte für '''HTTP-01'''-Challenges und Weiterleitungen auf HTTPS offen bleiben.
| |
| * Das Schließen von Port 80 reduziert das Sicherheitsrisiko kaum.
| |
| * Falls Port 80 durch den Anbieter blockiert ist, können '''DNS-01''' oder '''TLS-ALPN-01''' eingesetzt werden.
| |
|
| |
|
| [[Kategorie:Let's Encrypt]] | | [[Kategorie:Let's Encrypt]] |