Für Ubuntu 12.04 ist der Certbot-Client noch nicht in den Paketquellen von Ubuntu enthalten, daher muss man ihn manuell herunterladen und installieren:
wget https://dl.eff.org/certbot-auto chmod 0700 certbot-auto mv certbot-auto /usr/local/sbin
Nun kann das erste Zertifikat erzeugt werden. Certbot prüft bei jedem Aufruf die Installation und lädt bei Bedarf fehlende oder veraltete Pakete herunter, beim ersten Aufruf darf man sich also über diesbezügliche Meldungen nicht wundern.
Wenn der Server unter mehreren Namen erreichbar sein soll, dann muss man die alle angeben, es wird ein einziges Zertifikat erzeugt, das für alle diese Servernamen gültig ist. Wichtig ist, dass der Server unter allen diesen Namen aus dem Internet erreichbar ist, weil Certbot überprüft, ob man auch Kontrolle über diese Server hat. Außerdem muss man eine E-Mail-Adresse angeben.
certbot-auto certonly --apache --email <ADMINISTRATORADRESSE> -d <DOMAINNAME> -d <ZWEITER DOMAINNAME>
Hier ein Beispiel:
certbot-auto certonly --apache --email administrator@meineschule.de -d server.meineschule.de
Sollen die Zertifikate mit einem längeren RSA-Schlüssel erstellt werden, so kann in o. g. Befehlszeile die Option
--rsa-key-size 4096
angegeben werden. Ohne diese Angabe wird der Schlüssel mit 2048 Bit erstellt.
Das erstellte Zertifikat befindet sich jetzt in Ordnern unterhalb von /etc/letsencrypt
.
Manche ältere Clients benötigen einen zusätzlichen Eintrag in der Apache-Konfiguration. Die erforderliche Option SSLCertifikateChainFile
ergänzt man in der Konfigurationsdatei für jeden Vhost, der das Zertifikat verwenden sollen. Bei einer Standardinstallation editiert man dazu nur die Datei /etc/apache2/sites-available/default
(und eventuell /etc/apache2/sites-available/schulkonsole
):
# Schon vorhanden SSLCertificateFile /etc/ssl/private/server.pem SSLCertificateKeyFile /etc/ssl/private/server.pem # Diese Option ergänzen SSLCertificateChainFile /etc/ssl/private/server.pem # Optional: Let's-Encrypt-Einstellungen für sicheres HTTPS: Include /etc/letsencrypt/options-ssl-apache.conf
Wer möchte, kann wie im Beispiel von Let's-Encrypt vorgeschlagene Einstellungen zur Absicherung von Https aktivieren.
Das Zertifikat liegt noch nicht in der erforderlichen Form vor und ist auch noch nicht an der richtigen Stelle gespeichert. Dazu erzeugt man ein Skript /usr/local/sbin/letsencrypt-renew-posthook
mit folgendem Inhalt:
# /usr/local/sbin/letsencrypt-renew-posthook SRCDIR=/etc/letsencrypt/live/server.meineschule.de TARGETDIR=/etc/ssl/private echo echo "Sichere altes Zertifikat" cp -a $TARGETDIR/server.pem $TARGETDIR/server.pem_$(date +%Y%m%d.%H:%M) echo echo "Kopiere neues Zertifikat nach $TARGETDIR" cat $SRCDIR/privkey.pem > $TARGETDIR/server.pem cat $SRCDIR/cert.pem >> $TARGETDIR/server.pem cat $SRCDIR/chain.pem >> $TARGETDIR/server.pem chmod 0640 $TARGETDIR/server.pem chown root:ssl-cert $TARGETDIR/server.pem echo "Starte Dienste neu" service apache2 restart service slapd restart service cyrus-imapd restart echo "Fertig" echo echo "Die Let's-Encrypt-Zertifikate wurden erfolgreich erneuert." | mail -s "Zertifikate erneuert" administrator exit 0
Den Ordner „SRCDIR“ muss man ganz oben in der Datei anpassen. Danach ruft man das Skript einmalig per Hand auf, später wird das automatisch erledigt.
Das Zertifikat von Let's Encrypt ist für 90 Tage gültig. Folgender Cronjob sorgt für die automatische Erneuerung:
# Let's-Encrypt-Zertifikate erneuern 22 22 * * * root /usr/local/sbin/certbot-auto renew --no-self-upgrade --post-hook "/usr/local/sbin/letsencrypt-renew-posthook"> /var/log/letsencrypt.log 2>&1 || cat /var/log/letsencrypt.log | mail -s "Fehler beim Erneuern der Zertifikate von Let's Encrypt!" administrator
Mit dem Befehl renew
überprüft Certbot, ob das Zertifikat demnächst ausläuft. Ist dies der Fall, so wird das Zertifikat erneuert und anschließend das Skript aufgerufen, das das neue Zertifikat aktiviert.