Let's encrypt

Aus MattWiki

Anleitung, um Zertifikate mit einem der Let's Encrypt Clients zu erstellen oder zu aktualisieren.

Diese Anleitung bezieht sich auf den Certbot-Client.

Certbot

Anleitung siehe: https://certbot.eff.org/

Installation

Package für Debian:

apt-get install python-certbot-apache -t jessie-backports

Das Paket installiert auch einen Cronjob, der täglich die Aktualisierung ausführt, die Zertifikate aber nur dann tatsächlich aktualisiert, wenn ein bestimmtes Zeitfenster erreicht ist. Das Zeitfenster wird definiert in den Conf-Dateien in:

/etc/letsencrypt/renew/

Zertifikate erstellen inkl. Anpassung der Apache Konfig-Dateien unter verwendung des Apache-Plugins:

# certbot --apache

Alternativ certbot gleich auf bestimmte Domains festlegen:

# certbot --apache -d domain1.tld -d domain2.tld

Zertifikate erstellen ohne Anpassung der Apache Konfig-Dateien (die *.pem-Files müssen dann manuell in die Apache-Conf-Files eingefügt werden):

# certbot certonly 

Zertifikate aktualisieren

# certbot renew              # non-interaktiv erneuern aller Zertifikate
# certbot --renew certonly   # veraltet (?)

Weitere Domains hinzufügen

Dies ist nicht möglich. Aber man kann eine neue Registrierung mit einer neuen Liste von Domains durchführen:

# certbot --apache -d olddomain1.tld,olddomain2.tld,newsubdomain.newdomain.tld

Wichtig: Vorher die Domains verfügbar machen und den Server entsprechend einrichten.

Tricks

  • Um den Namen der Verzeichnisse in /etc/letsencrypt zu steuern am besten:
    • Zunächst die Hauptdomain mit Zertifikat erstellen
    • Danach mögliche Subdomains hinzufügen durch erneuten Aufruf von Certbot und Auswahl der weiteren Domains
    • Man kann auch ohne Konfiguration des Apache-Servers (ServerName und SSL-Konfiguration) den Certbot ausführen. Dieser fragt dann ServerName ab und legt eine SSL-Konfiguration selbst an.

Validation-Challenge-Methoden

Challenge-Typen
Plugin Challenge-Typ und Port
Apache tls-sni-01 (443)
Webroot http-01 (80)
nginx tls-sni-01 (443)
standalone http-01 (80) oder tls-sni-01 (443)
DNS plugins dns-01 (53)
manual http-01 (80), dns-01 (53) oder tls-sni-01 (443)

Wenn ein Plugin mehrere Methoden nutzen kann, dann wird mit dem Parameter --preferred-challenges ausgewählt, welcher Challenge-Typ verwendet werden soll.

Die Ausgewählte Methode wird in Datei /etc/letsencrypt/renewal/<domain>.conf im Parameter authenticator im Abschnitt [renewalparams] gespeichert.

Quelle: https://certbot.eff.org/docs/using.html#getting-certificates-and-choosing-plugins

Apache

todo

Webroot

Nutzung des Webroot Plugins und der http-01-Validierung:

certbot --webroot -w /var/www/example -d www.example.com -d example.com -w /var/www/other -d other.example.net -d another.other.example.net

Optional mit Parameter certonly, um nur das Zertifikat zu laden, ohne die Konfig anzupassen.

Nginx

todo

Standalone

todo

DNS plugin

todo

Manual

ungetestet:

certbot --manual --preferred-challenges http -w /var/www/example -d www.example.com -d example.com -w /var/www/other -d other.example.net -d another.other.example.net

Server Hardening

Vergleiche Artikel über Server Hardening (Debian).

Expiration-E-Mails

Installation

Bei der Erstregistrierung einer Domain mit Certbot wird ein Account bei Lets Encrypt angelegt.

Der Dialogassistenten fragt daraufhin automatisch eine E-Mailadresse ab.

Diese ist für Notfallkommunikation betreffend des Accounts und für Expiration E-Mails benutzt.

Details siehe https://letsencrypt.org/docs/expiration-emails/

Änderung der E-Mailadresse

certbot register --update-registration --email yourname+1@example.com

Abmeldung einer E-Mailadresse

In Expiration-E-Mails ist am Ende ein Abmelden-Link, mit dem man sich aus dem Mailverteiler entfernen kann.

Proxy-Domains

Wenn ein Server über einen Virtual Host mit Proxy in Apache eingebunden wird, kann dieser Virtual Host die DNS-Challenge von Let's Encrypt nicht erfolgreich erfüllen.

Für die Challenge in Letsencrypt ist Zugriff auf die Domainhinhalte notwendig.

Als Lösung kann die Webroot-Challenge genutzt werden. Hierfür muss Letsencrypt auf Webinhalte unter .well-known/acme-challange zugreifen. Für die Webroot-Challenge müssen die Unterverzeichnisse .well-known/acme-challange explizit vom Proxy ausgeschlossen werden.

Die ProxyPass-Parameter werden in der Reihenfolge in der Konfig-Datei geladen. Daher werden darin folgende Zeilen eingefügt:

ProxyPass        /.well-known/acme-challenge !

Alias /.well-known/acme-challenge /var/www/html/.well-known/acme-challenge

<Directory "/var/www/html/.well-known/acme-challenge">
    Options None
    AllowOverride None
    Require all granted
    AddDefaultCharset off
</Directory>

Der ProxyPass-Parameter mit einem Ausrufe-Zeichen am Ende beschreibt ein Verzeichnis, welches nicht per Proxy an das Proxy-Ziel weiter geleitet wird.

Der Alias-Parameter erzeugt ein Verzeichnis im Webserver, und leitet diesen an den angegebenen Pfad weiter.

Quellen: