Let’s Encrypt is een Certificate Authority (CA) die het mogelijk maakt om op eenvoudige wijze TLS/SSL sertificaten te verkrijgen en installeren en daarmee beveiligde HTTPS verbindingen mogelijk maakt op jouw server. We maken ierbij ook gebruik van een ‘client’, Certbot, die het vrijwel het hele proces verzorgt. Met deze tutorial zorg je ervoor dat Certbot het verkrijgen van het certificaat voor Nginx op Ubuntu 16.04 automatiseert, net als het automatisch vernieuwen van het certificaat.
Vooraf:
Om deze tutorial te kunnen volgen moet je ervoor zorgen dat het volgende geregeld is op jouw server:
- De Ubuntu server moet geïnstalleerd zijn volgens de instructies die op deze site beschreven zijn, inclusief een non-root gebruiker met sudo rechten en de installatie van de firewall.
- Een geregistreerde domeinnaam. In deze tutorial gebruik ik ‘voorbeeld.nl’.
- De volgende DNS records moeten beide verwijzen naar de server:
- Een A record met ‘voorbeeld.nl’.
- Een A record met ‘www.voorbeeld.nl’.
- Nginx geinstalleerd volgens de tutorial op deze site.
Certbot installeren
Als eerste moeten we Certbot installeren om een SSL certificaat van Let’s Encrypt te kunnen verkrijgen.
Omdat Certbot steeds wordt bijgewerkt is de kans groot dat de package die door Ubuntu wordt verstrekt verouderd is. Het is het beste om de Certbot files te downloaden van de Ubunto software repository.
We moeten die repository eerst toevoegen. Dat doen we met het volgende commando:
[codebox]sudo add-apt-repository ppa:certbot/certbot[/codebox]
Druk op <Enter> om de repository te accepteren. Daarna moet de packagelist de nieuwe informatie ophalen.
[codebox]sudo apt-get update[/codebox]
En tenslotte installeren we de package voor Nginx met apt-get:
[codebox]sudo apt-get install python-certbot-nginx[/codebox]
Certbot is klaar voor begruik, maar om Nginx met SSL te kunnen gebruiken moeten we nog wat configureren aan Nginx zelf.
Nginx instellen
Certbot kan SSL voor Nginx automatisch configureren, maar daarvoor moet hij wel het juiste server-block kunnen vinden in de configuratie. Hij doet dit door te zoeken naar het ‘server-name’-directive die overeen komt met de domeinnaam van het certificaat dat je aangevraagd hebt.
Als het goed is heb je dit tijdens de tutorial van Nginx al goed ingesteld, maar controleer dit even.
Open met Nano de configuratiefile van Nginx:
[codebox]
sudo nano /etc/nginx/sites-available/default
[/codebox]
Zoek naar de regel ‘server_name’ en als daar nog een underscore, _, staat, vervang deze dan door jouw domeinnaam:
[entrybox]…
server_name voorbeeld.nl www.voorbeeld.nl;
…[/entrybox]
Sla de file op met <ctrl-X> gevolgd door een ‘Y’.
Je kunt de nu configuratiefile controleren met het commando:
[codebox]sudo nginx -t[/codebox]
ALs je een foutmelding krijgt, bekijk de configuratiefile dan opnieuw. Let even op de ‘;’ aan het eind van de regel.
Als de file goed is, laat Nginx dan de nieuwe configuratie ophalen:
[codebox]sudo systemctl reload nginx[/codebox]
Certbot weet nu waar hij het juiste serverblock kan vinden en updaten.
De firewall instellen voor HTTPS verkeer.
Als je de tutorial van de installatie van Nginx hebt gevolgt, staat de firewall al goed, maar laten we het maar even controleren.
Geef het volgende commando:
[codebox]sudo ufw status[/codebox]
Als het goed is staat er dit:
[entrybox]
To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)
[/entrybox]
Als dat zo is mag je deze stap overslaan.
Maar als er Nginx Full, maar Nginx HTTP staat:
[entrybox]
... Nginx HTTP ALLOW Anywhere ... Nginx HTTP (v6) ALLOW Anywhere (v6)
[/entrybox] … dan moet je de volgende handelingen nog uitvoeren:
Met deze instellingen laat de firewall alleen HTTP verkeer door. Om HTTPS door te laten moeten we het Nginx Full profiel toevoegen.
[codebox]sudo ufw allow ‘Nginx Full’
sudo ufw delete allow ‘Nginx HTTP'[/codebox]
Je kunt nu opnieuw de status opvragen zoals in het begin van deze stap.
Het SSL-certificaat ophalen
Er zijn verschillende manieren om het SSL certificaat te verkrijgen, met verschillende plugins. De Nginx plugin zorgt ervoor dat Nginx juist geconfigureerd is en de configuratie opnieuw wordt geladen indien nodig.
[codebox]
sudo certbot --nginx --redirect -w /var/www/html -d voorbeeld.nl,www.voorbeeld.nl
[/codebox]Let op, er mogen geen spaties tussen de domeinen staan!
Dit start Certbot met de Nginx plugin. De -d opties geven aan voor welke domeinnamen we het certificaat op willen halen.
Als dit de eerste keer is dat je Certbot gebruikt, wordt er om je emailadres gevraagd en je moet instemmen met de voorwaarden. Als je dat gedaan hebt, zal Certbot met de Let’s Encrypt-server communiceren en er wordt een ‘challenge’ uitgevoerd om te controleren of je wel echt de eigenaar bent van de domeinnaam. Als dat allemaal klopt, merk je daar niets van en zal Certbot vragen hoe je je HTTPS settings ingesteld wilt hebben.
[entrybox]
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. ------------------------------------------------------------------------------- 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. ------------------------------------------------------------------------------- Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
[/entrybox]
Als je dus al het HTTP-verkeer automatisch wilt doorverwijzen naar HTTPS, dan kies je voor ‘2’, en anders kies je ‘1’.
De configuratie wordt aangepast en Certbot zal aangeven dat het proces geslaagd is en waar de certificaten opgeslagen zijn.
[entrybox]
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire on yyyy-mm-dd. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
[/entrybox]
Je certificaten zijn gedownload, en geïnstalleerd. Probeer je website nu met https:// en let op de security aanduiding van de browser. Deze zou nu aan moeten geven dat jouw site veilig is.
Als je je site nu test met SSL Labs Server Test, dan krijg je een ‘A-Grade’.
Controleer het automatisch vernieuwen-proces
Let’s Encrypt’s certificaten zijn maar 90 dagen geldig. Het is daarom verstandig om het proces van het vernieuwen van het certificaat te automatiseren. De Certbot-package regelt dat voor ons door het commando ‘certbot renew’ 2x per dag aan te roepen. Hiermee wordt het certificaat steeds binnen 30 dagen voordat het verloopt, automatisch vernieuwd.
Om te testen of dit vernieuwingsproces werkt, kun je dat met het volgende commando simuleren:[codebox]
sudo certbot renew --dry-run[/codebox]
Als je geen foutmeldingen ziet, is alles goed ingesteld.
Als later het geautomatiseerde proces niet werkt, zal Let’s Encrypt je een mail sturen met de waarschuwing dat je certificaat zal verlopen.Mocht je verder nog informatie zoeken over Certbot, dan kun je het beste eerst terecht op de site van Certbot.