Heute möchte ich zeigen, wie auf einem FreeBSD 11 System mit installiertem Apache 2.4 ein Let’s Encrypt Zertifikat mit der Shell erstellt und in Apache eingebunden wird.
Folgende Voraussetzungen sollten erfüllt sein:
- Funktionierender Webserver, welcher evtl. bereits mit einem anderen SSL-Zertifikat genutzt wurde
- Aktuelle Paketquellen (ggf. mit pkg update nachhelfen)
Grundsätzlich läuft die Ausstellung von SSL-Zertifikaten bei Let’s Encrypt völlig automatisiert in unserem Falle mittels
certbot
Also installieren wir vorerst das Paket mit
pkg install py27-certbot
oder kompilieren es mit
cd /usr/ports/security/py-certbot/ && make install clean
Nun muss die Domain das erste Mal validiert werden. Hierzu muss certbot die Domain (oder mehrere) kennen. Also wird nun mittels
certbot certonly --webroot -w <Pfad zum Apache-Webroot> -d <Domain1> -d <Domain2> -d <Domai3> -d <Domain4>
die Domain validiert.
Bei meiner Domain sieht der Aufruf z.B. so aus:
certbot certonly --webroot -w /var/webfiles -d kirgus.dyndns.org -d www.kirgus.dyndns.org -d kirgus.net -d kirgus.dyndns.net
Nach dem Aufruf wird die Domain validiert, indem im Webroot-Verzeichnis (Speicherort für alle Webfiles, welche durch den User erreichbar sind) eine Datei erstellt wird.
Diese Datei wird nun mit dem Aufruf aller angegebenen Domains abgerufen. Wenn die Datei auf allen Domains existiert, wird das Zertifikat ausgestellt und ein privater Schlüssel generiert.
Nun ist das Zertifikat erstellt, allerdings noch nicht im Webserver korrekt eingetragen. Hierfür editieren wir die Datei unter /usr/local/etc/apache24/extra/httpd-ssl.conf und ändern folgende Zeilen:
SSLCertificateFile "/usr/local/etc/letsencrypt/live/<Name der Domain>/fullchain.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/<Name der Domain>/privkey.pem"
SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/<Name der Domain>/chain.pem"
Nun noch den Webserver mit
apache24 -k restart
neu starten und nun sollte die Seite mit dem neuen Zertifikat nutzbar sein.
Eine Sache müssen wir allerdings noch tun, denn das erstellte Zertifikat ist immer nur 90 Tage lang gültig. Also muss es automatisiert am besten 2 Mal am Tag erneuert werden. Dies kann manuell jederzeit mit dem Befehl
certbot renew
ausgeführt werden. Wenn das Zertifikat nicht in den nächsten Tagen abläuft (oder nicht bereits abgelaufen ist), wird kein Tausch des Zertifikats durchgeführt. Aber natürlich kann das auch automatisiert werden. Hierzu tragen wir in der Datei /etc/crontab folgende Zeile am Ende ein:
* */12 * * root certbot renew --post-hook "service apache24 restart" > /var/log/renewssl.log
(Der Job läuft 2 Mal ab Tag, alle 12 Stunden). Die Ausgabe wird für Diagnosezwecke nach /var/log/renewssl.log geschrieben.
Der Parameter --post-hook ist notwendig, um nach einem Austausch der Dateien den Webserver neu zu starten, da sonst das alte Zertifikat noch im Speicher ist.