Nächste: , Vorige: , Nach oben: Dienste   [Inhalt][Index]


12.9.20 Zertifikatsdienste

Das Modul (gnu services certbot) stellt einen Dienst zur Verfügung, um automatisch ein gültiges TLS-Zertifikat von der Zertifikatsautorität Let’s Encrypt zu beziehen. Mit diesen Zertifikaten können Informationen sicher über HTTPS oder andere TLS-basierte Protokolle übertragen werden, im Wissen, dass der Client die Authentizität des Servers überprüfen wird können.

Let’s Encrypt macht das certbot-Werkzeug verfügbar, mit dem der Zertifizierungsvorgang automatisiert werden kann. Das Werkzeug erzeugt zunächst auf sichere Weise einen Schlüssel auf dem Server und stellt dann eine Anfrage an die Let’s-Encrypt-Zertifikatsautorität („Certificate Authority“, kurz CA), den Schlüssel zu signieren. Die Zertifikatsautorität prüft mit einem Challenge-Response-Protokoll, dass die Anfrage auch wirklich vom fraglichen Rechner (auch „Host“ genannt) kommt, wozu der Server über HTTP seine Antwort geben muss. Wenn dieses Protokoll erfolgreich befolgt wurde, signiert die Zertifikatsautorität den Schlüssel, woraus sich ein Zertifikat ergibt. Dieses Zertifikat ist eine begrenzte Zeit lang gültig, daher muss der Server für eine andauernde Bereitstellung von TLS-Leistungen immer wieder neu der Zertifikatsautorität eine Bitte um die Erneuerung der Signatur zukommen lassen.

Mit dem certbot-Dienst wird dieser Prozess automatisiert. Er sorgt dafür, dass am Anfang Schlüssel erzeugt werden und eine erste Zertifizierungsanfrage an den Dienst von Let’s Encrypt gestellt wird. Weiterhin ist das Challenge-/Response-Verfahren per Web-Server integriert. Das Zertifikat wird auf die Platte geschrieben und automatisch periodisch erneuert und bei der Erneuerung anfallende Aufgaben werden erledigt (z.B. das Neuladen von Diensten und das Kopieren von Schlüsseln mit entsprechenden Berechtigungen).

Certbot wird zweimal täglich zu einer zufälligen Minute der Stunde ausgeführt. Es tut so lange nichts, bis eine Erneuerung Ihrer Zertifikate fällig wird oder sie gesperrt wurden, durch regelmäßige Ausführung bekommen Sie aber die Chance, dass Ihr Server am Netz bleibt, wenn Let’s Encrypt eine Sperrung aus irgendeinem Grund anordnet.

Durch die Nutzung dieses Dienstes stimmen Sie dem „ACME Subscriber Agreement“ zu, das Sie hier finden:: https://acme-v01.api.letsencrypt.org/directory.

Scheme-Variable: certbot-service-type

Ein Diensttyp für den certbot-Client für Let’s Encrypt. Sein Wert muss ein certbot-configuration-Verbundsobjekt wie in diesem Beispiel sein:

(define %nginx-deploy-hook
  (program-file
   "nginx-deploy-hook"
   #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
       (kill pid SIGHUP))))

(service certbot-service-type
         (certbot-configuration
          (email "foo@example.net")
          (certificates
           (list
            (certificate-configuration
             (domains '("example.net" "www.example.net"))
             (deploy-hook %nginx-deploy-hook))
            (certificate-configuration
             (domains '("bar.example.net")))))))

Siehe unten für Details zur certbot-configuration.

Datentyp: certbot-configuration

Datentyp, der die Konfiguration des certbot-Dienstes repräsentiert. Dieser Typ verfügt über die folgenden Parameter:

package (Vorgabe: certbot)

Das certbot-Paket, das benutzt werden soll.

webroot (Vorgabe: /var/www)

Das Verzeichnis, aus dem heraus die Dateien für den Challenge-/Response-Prozess von Let’s Encrypt angeboten werden sollen.

certificates (Vorgabe: ())

Eine Liste der certificates-configuration-Objekte, für die Zertifikate und Anfragesignaturen erzeugt werden. Für jedes Zertifikat gibt es einen name-Eintrag und mehrere domains.

email (Vorgabe: #f)

Optional die E-Mail-Adresse, die als Kontakt für die Registrierung und das Wiedererlangen dienen soll. Es wird empfohlen, sie anzugeben, weil Sie darüber wichtige Mitteilungen über Ihr Konto und ausgestellte Zertifikate mitbekommen können.

server (Vorgabe: #f)

Optional eine andere URL des ACME-Servers. Wenn sie festgelegt wird, ersetzt sie die Voreinstellung von Certbot, nämlich die URL des Let’s-Encrypt-Servers.

rsa-key-size (Vorgabe: 2048)

Wie groß der RSA-Schlüssel sein soll.

default-location (Vorgabe: siehe unten)

Die vorgegebene nginx-location-configuration. Weil certbot „Challenges“ und „Responses“ anbieten muss, muss durch ihn ein Web-Server ausgeführt werden können. Das tut er, indem er den nginx-Webdienst mit einer nginx-server-configuration erweitert, die auf den domains auf Port 80 lauscht und eine nginx-location-configuration für den URI-Pfad-Teilraum /.well-known/ umfasst, der von Let’s Encrypt benutzt wird. Siehe Web-Dienste für mehr Informationen über diese nginx-Konfigurationsdatentypen.

Anfragen an andere URL-Pfade werden mit der default-location abgeglichen. Wenn sie angegeben wurde, wird sie zu jeder nginx-server-configuration hinzugefügt.

Nach Vorgabe stellt die default-location eine Weiterleitung von http://domain/… nach https://domain/… her. Sie müssen dann nur noch festlegen, was Sie auf Ihrem Webauftritt über https anbieten wollen.

Übergeben Sie #f, um keine default-location vorzugeben.

Datentyp: certificate-configuration

Der Datentyp, der die Konfiguration eines Zertifikats repräsentiert. Dieser Typ hat die folgenden Parameter:

name (Vorgabe: siehe unten)

Dieser Name wird vom Certbot intern zum Aufräumen und in Dateipfaden benutzt; er hat keinen Einfluss auf den Inhalt des erzeugten Zertifikats. Um Zertifikatsnamen einzusehen, führen Sie certbot certificates aus.

Die Vorgabe ist die erste angegebene Domain.

domains (Vorgabe: ())

Die erste angegebene Domain wird als Name des Zertifikatseigentümers („Subject CN“) benutzt und alle Domains werden als alternative Namen („Subject Alternative Names“) auf dem Zertifikat stehen.

challenge (Vorgabe: #f)

Welche Art von Challenge durch den Certbot ausgeführt wird. Wenn #f angegeben wird, wird die HTTP-Challenge voreingestellt. Wenn ein Wert angegeben wird, wird das Plugin benutzt, das auch bei manuellen Ausführungen benutzt wird (siehe authentication-hook, cleanup-hook und die Dokumentation unter https://certbot.eff.org/docs/using.html#hooks), und Let’s Encrypt wird dazu berechtigt, die öffentliche IP-Adresse der anfordernden Maschine in seinem Protokoll zu speichern.

csr (Vorgabe: #f)

Der Dateiname der Zertifizierungsanfrage („Certificate Signing Request“, CSR) im DER- oder PEM-Format. Wenn #f angegeben wird, wird kein solches Argument an den Certbot übermittelt. Wenn ein Wert angegeben wird, wird der Certbot ihn anstelle einer selbsterstellten CSR verwenden. Die in domains genannten Domänen müssen dabei konsistent sein mit denen, die in der CSR-Datei aufgeführt werden.

authentication-hook (Vorgabe: #f)

Welcher Befehl in einer Shell zum Antworten auf eine Zertifikats-„Challenge“ einmalig ausgeführt wird. Für diesen Befehl wird die Shell-Variable $CERTBOT_DOMAIN die Domain enthalten, für die sich der Certbot authentisiert, $CERTBOT_VALIDATION enthält die Validierungs-Zeichenkette und $CERTBOT_TOKEN enthält den Dateinamen der bei einer HTTP-01-Challenge angefragten Ressource.

cleanup-hook (Vorgabe: #f)

Welcher Befehl in einer Shell für jede Zertifikat-„Challenge“ einmalig ausgeführt wird, die vom auth-hook beantwortet wurde. Für diesen Befehl bleiben die Shell-Variablen weiterhin verfügbar, die im auth-hook-Skript zur Verfügung standen, und außerdem wird $CERTBOT_AUTH_OUTPUT die Standardausgabe des auth-hook-Skripts enthalten.

deploy-hook (Vorgabe: #f)

Welcher Befehl in einer Shell für jedes erfolgreich ausgestellte Zertifikat einmalig ausgeführt wird. Bei diesem Befehl wird die Shell-Variable $RENEWED_LINEAGE auf das Unterverzeichnis für die aktuelle Konfiguration zeigen (zum Beispiel ‘"/etc/letsencrypt/live/example.com"’), in dem sich die neuen Zertifikate und Schlüssel befinden. Die Shell-Variable $RENEWED_DOMAINS wird eine leerzeichengetrennte Liste der erneuerten Zertifikatsdomänen enthalten (zum Beispiel ‘"example.com www.example.com"’.

Für jede certificate-configuration wird das Zertifikat in /etc/letsencrypt/live/name/fullchain.pem und der Schlüssel in /etc/letsencrypt/live/name/privkey.pem gespeichert.


Nächste: DNS-Dienste, Vorige: Web-Dienste, Nach oben: Dienste   [Inhalt][Index]