
Let’s Encrypt is een certificaatautoriteit die gratis TLS/SSL-certificaten uitgeeft en het installeren ervan eenvoudig maakt, zodat je het HTTPS-verkeer naar je webservers kunt versleutelen. Het leunt daarvoor op Certbot, software die de meeste stappen automatisch afhandelt. Houd er rekening mee dat Google met zijn browser Chrome zijn gebruikers wil waarschuwen voor onbeveiligde sites, wat gevolgen kan hebben voor je vindbaarheid.
In deze tutorial laat ik zien hoe je met Let’s Encrypt een gratis SSL-certificaat voor Nginx op Ubuntu 14.04 krijgt. Ik laat ook zien hoe je dat certificaat automatisch vernieuwt (een certificaat van Let’s Encrypt is maar 90 dagen geldig!).
Stap 1, Certbot installeren
Wat is Certbot? Certbot zet automatisch HTTPS aan op je site door er Let’s Encrypt-certificaten op uit te rollen. Draai je geen Nginx of geen Ubuntu 14.04, kijk dan even op hun site: daar staat per systeem beschreven hoe je SSL-certificaten met Let’s Encrypt genereert.
We beginnen met Certbot downloaden naar de map /usr/local/sbin:
cd /usr/local/sbin
wget https://dl.eff.org/certbot-autoVergeet niet het bestand uitvoerbaar te maken:
chmod a+x /usr/local/sbin/certbot-autoStap 2, Een certificaat aanvragen
Certbot moet bij de map kunnen, dus passen we eerst onze Nginx-configuratie aan. Die staat standaard in /etc/nginx/sites-available/default. Wij gebruiken nano om hem te bewerken, maar pak gerust de editor van je keuze:
nano /etc/nginx/sites-available/defaultVoeg binnen het serverblok toe:
server {
#votre configuration ...
location ~ /.well-known {
allow all;
}
}Je hebt de publieke map van je site nodig. Gebruik je het standaard configuratiebestand, dan is dat /usr/share/nginx/html, werk je met Laravel, dan /path/to/public/.
Controleer of er geen fouten zijn.
nginx -tIs alles in orde, herstart dan Nginx:
service nginx restartStap 3, TLS/SSL instellen op de nginx-server
Nu we het publieke pad kennen, kunnen we via de webroot-plugin een SSL-certificaat aanvragen. We geven daarbij ook onze domeinnamen op met de optie -d. Moet één certificaat voor meerdere domeinnamen werken (bijvoorbeeld exemple.com en www.exemple.com), neem ze dan allemaal op, te beginnen met het hoofddomein (dus exemple.com). Vervang ook de gemarkeerde delen door het juiste webroot-pad en de juiste domeinnamen:
certbot-auto certonly -a webroot --webroot-path=/votre/chemin/public -d exemple.com -d www.exemple.comCertbot stelt je een paar vragen, waaronder je e-mailadres: daarop krijg je bericht zodra je certificaat bijna verloopt. Verderop zien we samen hoe je het automatisch laat vernieuwen.
De certificaten
Nadat het certificaat is uitgegeven heb je de volgende bestanden:
- cert.pem: het certificaat van je domein
- chain.pem: het certificaat van Let’s Encrypt
- fullchain.pem: cert.pem en chain.pem samengevoegd
- privkey.pem: je private sleutel.
Die bestanden komen in een submap van /etc/letsencrypt/archive terecht. De client van Let’s Encrypt legt daarnaast symbolische links naar de meest recente certificaten aan in /etc/letsencrypt/live/votre_nom_de_domaine. Omdat die links altijd naar de nieuwste certificaten wijzen, is dat het pad waarnaar je in je configuratie verwijst.
Een Diffie-Hellman-sleutel genereren
Voor extra zekerheid genereer je ook een Diffie-Hellman-sleutel van 2048 bits:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048Dat duurt een paar minuten, maar daarna staat je DH-bestand klaar op /etc/ssl/certs/dhparam.pem.
Nu je je SSL-certificaat hebt, moet je Nginx nog zo instellen dat hij het gebruikt.
We beginnen met ons serverblok opnieuw te openen:
nano /etc/nginx/sites-available/defaultDe volgende regels, die poort 80 openzetten voor HTTP-verkeer, halen we weg (of zetten we in commentaar):
#listen 80 default_server;
#listen [::]:80 default_server ipv6only=on;Vervolgens luisteren we op poort 443 voor HTTPS:
listen 443 ssl;In hetzelfde serverblok zetten we ook de symbolische link die naar de certificaten wijst die we met het commando certbot-auto hebben gegenereerd:
ssl_certificate /etc/letsencrypt/live/exemple.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemple.com/privkey.pem;Daarna volgt de standaard SSL-configuratie van onze server:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;Voeg tot slot, buiten je hoofdserverblok, dit nieuwe serverblok toe om HTTP (poort 80) door te sturen naar HTTPS (poort 443).
server {
listen 80;
listen [::]:80;
server_name exemple.com www.exemple.com;
return 301 https://$host$request_uri;
}Controleer of er fouten in je configuratie zitten:
nginx -tHerstart daarna je nginx-server:
service nginx restartStap 4, Je certificaat automatisch vernieuwen
Zoals ik aan het begin schreef verlopen SSL-certificaten na 90 dagen. Je moet ze dus vernieuwen, en vergeet je dat, dan krijg je een e-mail voordat het certificaat van Let’s Encrypt afloopt.
Om het automatisch te laten gebeuren, zetten we het commando certbot-auto renew in de cronjobs van onze server.
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reloadElke maandag om 2.30 uur vernieuwen we het certificaat en om 2.35 uur herstarten we de nginx-server.
Conclusie
Je webserver draait nu met een SSL-certificaat van Let’s Encrypt. Dat is een prima alternatief voor betaalde certificaten. Veel hosters, OVH voorop, bieden SSL gratis aan via Let’s Encrypt. Handig, zeker nu Google sites stap voor stap richting HTTPS duwt.
bron: digitalocean.com & wikipedia.org
···


