SSL certificaat op RPi

SSL certificaten kunnen gebruikt worden voor een webserver zoals Apache of Nginx, maar uiteraard ook voor web-applicaties zoals Gogs, Ansible Tower, Grafana, etc… Bij Let’s Encrypt kunnen gratis certificaten aangevraagd worden, welliswaar voor een levensduur van maar 90 dagen, maar deze kun je dan ook weer vernieuwen. Op de command-line gaat dat eenvoudig met certbot.

$ sudo apt update
$ sudo apt install -y certbot

Hierna kan met dit commando een stand-alone certificaat aangevraagd worden:

$ sudo certbot certonly --standalone --noninteractive --agree-tos --email you@emailaddress -d your.domain.name

In de directory ‘/etc/letsencrypt/live/your.domain.name’ komen nu de certificaten en deze kun je vervolgens gebruiken in je webserver of web-applicatie.

Mocht je een foutmelding krijgen in de vorm van ‘Problem binding to port 80’, stop dan eerst de webserver en probeer het ‘certbot’ commando nogmaals.

Auto renewal

Veel Linux distributies hebben tijdens het installeren van ‘certbot’ een timer geïnstalleerd voor het automatisch vernieuwen van de certificaten. Controle kan met het volgende commando:

$ sudo systemctl list-timers

Mocht dit niet het geval zijn, dan kan dat ook alsvolgt ingesteld worden.

De certificaten van Let’s Encrypt kun je verlengen met het certbot commando:

$ sudo certbot renew

Dit commando zal alle certificaten vernieuwen en aangezien de Let’s Encrypt certificaten een beperkte geldigheid hebben van 90 dagen, is het wellicht handig om hier een crontab job voor te maken die de certificaten elke dag probeert te vernieuwen. Indien de ‘expiry’ < 30 dagen zal het certificaat vernieuwd worden. Nginx dient gestopt te worden voordat het renew commando gestart wordt en na het vernieuwen moet nginx weer gestart worden. Daar zijn pre- en post- hooks voor in certbot zodat het crontab commando als volgt wordt om dagelijks om 03:00 de certificaten te vernieuwen:

0 3 * * * /usr/bin/certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"

Kijk ook eens in deze post om de certificaten te gebruiken in een nginx-reverse-proxy server.