Gratis SSL-certificaat met Let's Encrypt en Certbot instellen

Gepubliceerd op Bijgewerkt op 5 min leestijd

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-run voordat 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?
Niets. Let's Encrypt is een certificeringsinstantie zonder winstoogmerk en geeft certificaten gratis uit. Er zijn geen eenmalige en geen doorlopende kosten.
Hoe lang is een Let's Encrypt-certificaat geldig?
90 dagen. Certbot vernieuwt het automatisch zodra er minder dan 30 dagen resterende looptijd over is. De systemd-timer die daarvoor zorgt, wordt bij de installatie ingericht.
Moet ik het certificaat met de hand verlengen?
Nee. Controleer eenmalig met certbot renew --dry-run of de verlenging netjes doorloopt. Daarna regelt Certbot dat zelfstandig op de achtergrond.
Werkt Let's Encrypt ook voor subdomeinen?
Ja. Extra namen hangt u eenvoudig met bijkomende parameters van het type -d aan het commando. Een wildcard-certificaat vraagt bovendien om een controle via een DNS-record en dus om een passende DNS-plug-in voor Certbot.
Waarom mislukt de domeincontrole?
In bijna alle gevallen wijst de A-record van het domein niet naar deze server, of blokkeert een firewall poort 80. Let's Encrypt bereikt de server dan niet en breekt het uitgeven af.

Lets-Encrypt Certbot SSL-certificaat HTTPS Apache Debian Ubuntu