Let’s Encrypt is een gratis systeem om onder meer beveiligde communicatie tussen webbrowsers en webserver mogelijk te maken via het https-protocol. Op Debian (en afgeleide) Linux-distributies biedt Let’s Encrypt automatische configuratie voor de Apache webserver. In deze workshop leer je hoe je Let’s Encrypt installeert en configureert voor een Apache webserver die draait op een Linux-versie die niet op Debian gebaseerd is voor het (op het moment van schrijven) niet bestaande internetdomein voorbeelddomein.eu. In Let’s Encrypt jargon wordt dit de webroot-methode genoemd.

Stap 1: Installatie Let’s Encrypt

Op de meeste Linux-distributies is Let’s Encrypt eenvoudig te installeren via de pakketbeheerder. De voorbeelden in dit artikel zijn gebaseerd op basis van Arch Linux, maar deze zijn uiteraard aan te passen op basis van je eigen voorkeursdistributie. In de voorbeelden in dit artikel ga ik ervan uit dat je als root ingelogd bent. Let’s Encrypt installeer je door middel van het commando:

pacman -S certbot

Hoewel Let’s Encrypt nu geïnstalleerd is, is het nog niet mogelijk meteen de SSL-certificaten aan te maken. Let’s Encrypt verwacht namelijk in de hoofddirectory van je website een subdirectory met de naam ./well-known/acme-challenge. Deze subdirectory maak je aan met het volgende commando:

mkdir -p /srv/http/.well-known/acme-challenge

Vanaf nu is het mogelijk om met behulp van het commando Certbot de certificaten aan te maken. 

Stap 2: Aanmaken certificaten voor het https-protocol via Let’s Encrypt

Met het commando Certbot ben je in staat op verschillende manieren certificaten voor het https-protocol te beheren. In deze workshop beperk ik me tot hoe je certificaten vanaf de opdrachtprompt aanmaakt. Om voor het subdomein www.voorbeelddomein.eu de certificaten aan te maken geef je het volgende commando:

certbot certonly –email jenaam@voorbeelddomein.eu –webroot -w /srv/http -d www.voorbeelddomein.eu

Om Let’s Encrypt voor je eigen domein te configureren hoef je alleen het e-mailadres en de domeinnaam aan te passen. Als je een andere Linux-distributie dan Arch Linux gebruikt, moet je wellicht ook nog de directory van je website aanpassen ten opzichte van dit voorbeeld. Als je Certbot voor de eerste keer start, vraagt Certbot of je akkoord gaat met de voorwaarden. Druk op A om akkoord te gaan en verder te gaan. Daarna vraagt Certbot of je je e-mailadres wilt delen met een partner die betrokken is bij de oprichting van het Let’s Encrypt project. Hier kun je naar eigen inzicht een antwoord op geven. Als het aanmaken van het certificaat goed is gegaan, krijg je een scherm dat er ongeveer uitziet als afbeelding 1. Certbot adviseert om een veilige back-up te maken van de /etc/letsencrypt directory, omdat in deze directory je account gegevens en privésleutels zijn opgeslagen. 

Stap 3: Configuratie apache webserver voor https-websites

Na installatie van de Apache webserver staat standaard niet het https-protocol geactiveerd. In de configuratiefile /etc/httpd/conf/httpd.conf van Apache onder Arch Linux moet je daarom het #-teken weghalen bij de 3 regels die in listing 1 vermeld staan. De regels staan niet onder elkaar in httpd.conf, dus het makkelijkst is om gebruik te maken van de zoekfunctie van je teksteditor (CTRL-W in nano).

In /etc/httpd/conf/extra/httpd-ssl.conf is een algemene configuratie voor het gebruik van https voor het domein www.example.com opgenomen. Vanaf de regel <VirtualHost _default_:443> vul je de relevante gegevens in voor www.voorbeelddomein.eu. In listing 2 is opgenomen om welke regels dit gaat. Zoek met je teksteditor steeds naar het eerste woord van elke regel uit listing 2 en neem de gegevens achter dat woord uit listing 2 over op basis van de specifieke gegevens van je eigen domein. Door met Certbot de certificaten per subdomein aan te maken (zoals in dit artikel beschreven), ben je in staat de configuratie voor het https-protocol eenvoudig te verwijzen naar /etc/letsencrypt/live/www.voorbeelddomein.eu/fullchain.pem en /etc/letsencrypt/live/www.voorbeelddomein.eu/privkey.pem.

De configuratiebestanden van Apache controleer je met:

apachectl configtest

Vervolgens start je nu opnieuw de Apache webserver en controleer je of de webserver daadwerkelijk zonder fouten opgestart is met de commando’s:

systemctl restart httpd

systemctl status httpd

Als alles goed is gegaan, krijg je een uitvoer op je scherm dat er ongeveer uitziet als afbeelding 2 en is het mogelijk om vanaf nu via https://www.voorbeelddomein.eu je website te benaderen.

[invoegen afbeelding 2] Afbeelding 2

Stap 4: Certificaten voor https-protocol vernieuwen

Met Let’s Encrypt is het door middel van een commando mogelijk om de aangemaakte certificaten voor het https-protocol te vernieuwen. Naast argumenten voor betere veiligheid is dit de reden waarom de certificaten aangemaakt met Let’s Encrypt 90 dagen geldig zijn. De certificaten vernieuw je met het volgende commando:

certbot renew

Vanwege de mogelijkheden die Let’s Encrypt biedt en de geldigheid van 90 dagen van de certificaten is het handiger om het vernieuwen van de certificaten te automatiseren. In deze workshop gebruik je hier systemd voor. Eerst maak je een systemd service aan waarin je via systemd de certificaten vernieuwt. In listing 3 tref je de inhoud aan van certbot.service. Neem deze listing over en sla het bestand op als /etc/systemd/system/certbot.service. In de regel die met ExcecStart begint, staat het commando om de certificaten te vernieuwen. De regel die met ExcecStartPost begint laat na het vernieuwen van de certificaten de webserver opnieuw starten, omdat deze anders de oude certificaten blijft gebruiken. Omdat er een nieuw bestand geplaatst is in de directory /etc/systemd/system moet je systemd op de hoogte brengen dat dit gebeurd is. Dit doe je met het commando:

systemctl daemon-reload

Nu is het mogelijk om via het systemctl commando te testen of je aangemaakte service goed werkt. Dit doe je door het volgende commando in te typen:

systemctl start certbot.service

Als de uitvoer van het bovenstaande commando geen fouten geeft, maak je vervolgens voor deze systemd service een timer aan, zodat het vernieuwen op de door jou gewenste frequentie plaatsvindt. Neem uit listing 4 de inhoud van dit bestand over en sla het bestand op als /etc/systemd/system/certbot.timer. Op de OnCalendar regel staat dat maandelijks op de achtste het script gedraaid moet worden. Door bij RandomizedDelaySec=1day aan te geven gaat dit script ergens op de achtste van de maand lopen en wordt voorkomen dat allerlei scripts tegelijkertijd draaien. Geef na het opslaan van het timerbestand nu ook weer een:

systemctl daemon-reload

De timer start je met het commando:

systemctl start cerbot.timer

Nu zorg je met het onderstaande commando ervoor dat de timer bij het opstarten van je computer gestart wordt:

systemctl enable certbot.timer

Als je wilt zien wanneer de volgende keer is dat het Systemd script gestart wordt voor het vernieuwen van je certificaten, type je het volgende commando in:

systemctl list-timers

Tot slot

In deze workshop is alleen het installeren van Let’s Encrypt certificaten voor het gebruik in combinatie met een (Apache) webserver en het vernieuwen van deze certificaten besproken. Let’s Encrypt biedt meer mogelijkheden. Kijk daarvoor eens op de website van Let’s Encrypt en Certbot.

Links

https://certbot.eff.org/docs/

https://letsencrypt.org/