Webseite mit Let’s Encrypt Zertifikat sichern

06.01.2024
Dieser Inhalt ist bereits etwas älter.
This content is already a bit old.
Bild

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.


 

Feedback, suggestions for improvement, further ideas?

Simply use the contact form or send an email directly to info@kirgus.net.