Gratis SSL-certificaat met Let's Encrypt en Certbot instellen
Een gratis SSL-certificaat voor uw Linux-server: zo installeert u Certbot op Debian en Ubuntu, vraagt u een Let's Encrypt-certificaat voor Apache aan en laat u het automatisch verlengen.
Een SSL-certificaat van Let's Encrypt kost niets, is in een paar minuten opgezet en wordt door elke gangbare browser geaccepteerd. In deze handleiding zet u HTTPS op uw eigen Linux-server met Apache op: onder Debian 13, Debian 12, Ubuntu 24.04 LTS en Ubuntu 22.04 LTS.
Het uitgeven neemt Certbot voor zijn rekening, de officiële ACME-client van de Electronic Frontier Foundation. Certbot vraagt het certificaat aan, zet het in de Apache-configuratie en verlengt het daarna zelfstandig via een systemd-timer.
Vereisten
- Een domein waarvan de A-record (en bij IPv6 ook de AAAA-record) naar uw VPS of rootserver wijst.
- Een draaiende Apache2-webserver met een VirtualHost voor dit domein.
- Roottoegang via SSH.
- Poort 80 en poort 443 moeten van buitenaf bereikbaar zijn. Let's Encrypt controleert het domein via poort 80.
Controleer eerst of het domein werkelijk naar uw server wijst. Voer uw domein daarvoor in op https://check-host.net/. Verschijnt daar het IP-adres van uw server, dan kunt u verder. Wijst de DNS nog naar een oud doel, wacht dan de actualisering af, anders mislukt het uitgeven.
Systeem bijwerken
Breng eerst de pakketlijst en de geïnstalleerde pakketten op de actuele stand:
apt update && apt upgrade -y
Certbot installeren
Er zijn twee gangbare manieren. Het distributiepakket is de eenvoudigste en voor de meeste servers volledig toereikend. Het snap-pakket levert altijd de nieuwste Certbot-versie en wordt door de Electronic Frontier Foundation officieel aanbevolen.
Variant 1: Certbot uit de distributierepository
Onder Debian en Ubuntu zitten Certbot en de Apache-plug-in direct in de pakketbronnen:
apt install certbot python3-certbot-apache -y
Het vroeger veelgebruikte pakket "python-certbot-apache" hoorde bij Python 2 en bestaat niet meer. Op alle actuele Debian- en Ubuntu-versies is "python3-certbot-apache" de juiste pakketnaam.
Variant 2: Certbot via snap installeren
Wilt u telkens de nieuwste Certbot-versie, bijvoorbeeld voor DNS-plug-ins of wildcard-certificaten, installeer Certbot dan als snap. Verwijder vooraf een eventueel aanwezige pakketinstallatie, zodat de twee elkaar niet in de weg zitten:
apt remove certbot -y
snap install core
snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
Certificaat aanvragen en in Apache opnemen
De snelste weg is de Apache-plug-in. Certbot leest de aanwezige VirtualHosts, vraagt het certificaat aan en schrijft zelf de bijbehorende SSL-configuratie:
certbot --apache -d MijnDomein.nl -d www.MijnDomein.nl
Houdt u de Apache-configuratie liever zelf in de hand, dan kunt u de domeincontrole via de webroot-map laten lopen. Geef daarbij precies de map op die de VirtualHost als DocumentRoot gebruikt:
certbot --authenticator webroot --installer apache -w /var/www/MijnDomein.nl -d MijnDomein.nl -d www.MijnDomein.nl
Staat uw website in de standaardmap, dan luidt het commando:
certbot --authenticator webroot --installer apache -w /var/www/html/ -d MijnDomein.nl -d www.MijnDomein.nl
De vragen van Certbot
Bij de eerste aanroep stelt Certbot een paar vragen:
- E-mailadres: Geef een adres op dat u werkelijk leest. Let's Encrypt stuurt daarnaartoe de waarschuwing wanneer een verlenging uitblijft.
- Gebruiksvoorwaarden: Met "A" stemt u in.
- Nieuwsbrief van de Electronic Frontier Foundation: "Y" voor ja, "N" voor nee. Dat is vrijwillig en heeft geen invloed op het certificaat.
- Doorverwijzing naar HTTPS: Kies de optie "Redirect", zodat Apache alle HTTP-aanroepen automatisch naar HTTPS omleidt.
Daarna toont Certbot het pad naar het certificaat. De bestanden staan onder /etc/letsencrypt/live/MijnDomein.nl/. Bewerk deze bestanden niet met de hand, want ze worden bij elke verlenging opnieuw geschreven.
Automatische verlenging controleren
Een certificaat van Let's Encrypt is 90 dagen geldig. Certbot vernieuwt het automatisch zodra er minder dan 30 dagen resterende looptijd over is. Daarvoor levert het pakket een systemd-timer mee. Controleer of die actief is:
systemctl list-timers certbot.timer
Is de timer niet actief, schakel hem dan in:
systemctl enable --now certbot.timer
Test het verloop daarna in een droogloop. Er wordt niets uitgegeven, Certbot speelt de verlenging alleen maar door:
certbot renew --dry-run
Leg eenmalig een deploy-hook vast, zodat Apache het nieuwe certificaat na een verlenging ook werkelijk gebruikt:
certbot renew --deploy-hook "systemctl reload apache2"
Certificaten tonen en verwijderen
Een overzicht van alle op de server beheerde certificaten levert:
certbot certificates
Een certificaat dat u niet meer nodig hebt verwijdert u zo, zodat Certbot het niet verder probeert te verlengen:
certbot delete --cert-name MijnDomein.nl
Veelvoorkomende fouten
- "Could not bind to port 80": Een andere dienst bezet poort 80. Stop die dienst of gebruik de webroot-methode, die met de draaiende Apache werkt.
- "Invalid response from http://.../.well-known/acme-challenge/...": Het domein wijst niet naar deze server, een firewall blokkeert poort 80, of de opgegeven webroot-map past niet bij de VirtualHost.
- "The requested apache plugin does not appear to be installed": Het pakket "python3-certbot-apache" ontbreekt.
- "too many certificates already issued": U bent tegen een limiet van Let's Encrypt aangelopen. Test configuraties voortaan met
--dry-runvoordat u een echt certificaat aanvraagt. - De browser toont nog steeds een waarschuwing: Leeg de browsercache en controleer of Apache na het uitgeven opnieuw is geladen.
HTTP permanent naar HTTPS omleiden
Hebt u bij de vraag van Certbot de doorverwijzing niet geactiveerd, dan kunt u die op elk moment alsnog toevoegen. Hoe dat via een .htaccess-bestand werkt, beschrijven wij in een apart artikel over de doorverwijzing van HTTP naar HTTPS.
Veelgestelde vragen
Wat kost een SSL-certificaat van Let's Encrypt?
Hoe lang is een Let's Encrypt-certificaat geldig?
Moet ik het certificaat met de hand verlengen?
Werkt Let's Encrypt ook voor subdomeinen?
Waarom mislukt de domeincontrole?
2023-2026 KernelHost GmbH. Alle rechten voorbehouden. Deze handleiding is auteursrechtelijk beschermd. Publicatie op andere websites, geheel, gedeeltelijk of in bewerkte vorm, is zonder onze schriftelijke toestemming niet toegestaan. Citeren met bronvermelding en link is uitdrukkelijk welkom.

