Bezoekers

44.4%Netherlands Netherlands
31.4%United States United States
9.2%United Kingdom United Kingdom
5.5%Belgium Belgium
1.8%Germany Germany
1.8%China China
1.8%Uruguay Uruguay
1.8%Spain Spain
1.8%Argentina Argentina

Totaal: 1732

SSL Certificaat Let's Encrypt

SSL staat voor Secure Socket Layer. Een SSL Certificaat is een set digitale sleutels die wordt gekoppeld aan je domein / website. Het zorgt voor het bekende ‘slotje’ dat je ziet bij de URL in je browser. Met een SSL certrificaat is het dus mogelijk om de verbinding tussen browser en webserver te versleutelen. Er zijn betaalbare SSL certificaten te koop, maar waarom betalen als je een gratis certificaat van Let's Encrypt kunt aanvragen.

Meer informatie over Let's Encrypt vind u op de website: https://letsencrypt.org/

Benodigd:

  • Raspberry Pi webserver compleet geinstalleerd. Voor het installeren van een veilige webserver, volg deze handleiding Raspberry Pi Veilige Webserver, NGINX, PHP, MYSQL, PHPMYADMIN, WEBMIN
  • Geldige en werkende domeinnaam (DNS insteld voor gebruik met uw raspy webserver)
  • Putty en kennis hoe te werken middels een SSH verbinding
  • Een geldig email adres

 

Het installeren doen we middels een SSH verbinding met Putty. Putty kunt u hier downloaden: https://www.putty.org/

Om een certificaat aan te vragen, maken we gebruik van de pakketten git en tmux.

 

Installeer beide pakketten.

sudo apt-get install tmux git

We gaan nu eerst een zogenaamd 2048 dhparam bestand genereren. Dit kan even wat tijd in beslag nemen op de Raspberry, dus we gaan dat doen in een tmux sessie welke op de achtergrond blijft doordraaien zodat we ondertussen in een nieuw terminal venster verder kunnen werken.

Creëer een tmux sessie

tmux new -s dhparam

Om het dhparam bestand op te slaan moeten we een map aanmaken. In dit voorbeeld maken we een map 'template' aan waar we alle configuratie templates in op kunnen slaan.

sudo mkdir -p /etc/nginx/template

Nu gaan we het dhparam bestand aanmaken.

sudo openssl dhparam -out /etc/nginx/template/dh2048.pem 2048

Dit gaat wel even duren. Hier eerst even een korte handleiding voor het gebruik van tmux.

Toon alle actieve sessies:
tmux ls

Ga naar een actieve sessie:
tmux a -t [SESSIE_NAAM]

Om terug te gaan naar de tmux dhparam sessie:
tmux a -t dhparam

Als het aanmaken van het dhparam bestand is gelukt, sluit u de sessie met:
exit

 

Nu het dhparam bestand aangemaakt word, kunnen we deze Putty sessie afsluiten. Het aanmaken van het bestand loopt nu gewoon door. Open een nieuw terminal venster met Putty en maak verbinding met de Raspberry.

In dit nieuwe venster gaan we een template aanmaken, let's encrypt challenge. Middels deze template kan Let's Encrypt vaststellen dat u daadwerkelijk de eigenaar bent van de server waarvoor u een SSL certificaat aanvraagt.

sudo nano /etc/nginx/template/letsencrypt.conf

Pak/type in deze nieuwe file de volgende regels:

location /.well-known/acme-challenge/ {

    default_type "text/plain";
    allow all;

}

Nu maken we een template aan voor de SSL configuratie:

sudo nano /etc/nginx/template/SSL.conf

Plak daar de volgende regels in: (LET OP!! Wijzig in beide regels [UW-DOMEIN-NAAM.NL] in uw eigen domeinnaam)

ssl on;
# ssl certificates
ssl_certificate /etc/letsencrypt/live/[UW-DOMEIN-NAAM.NL]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/[UW-DOMEIN-NAAM.NL]/privkey.pem;

# Optimisation
ssl_stapling on;
ssl_stapling_verify on;

# FastCgi
fastcgi_param HTTPS on;
fastcgi_param HTTP_SCHEME https;

# enable session resumption to improve https performance
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 5m;

# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /etc/nginx/template/dh2048.pem;

# enables server-side protection from BEAST attacks
ssl_prefer_server_ciphers on;

# disable SSLv3(enabled by default since Nginx 0.8.19) since it's less secure than TLS
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

# ciphers chosen for forward secrecy and compatibility
ssl_ciphers "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS";

# enable ocsp stapling (mechanism by which a site can convey certificate revocation information to visitors in a privacy-preserving, scalable manner)
resolver 8.8.8.8 valid=360s ipv6=off; # Google DNS
resolver_timeout 15s;

add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload";

 

Om door te gaan moet git geinstalleerd zijn. Als u deze handleiding vanaf het begin gevolgd heeft, dan is git al aanwezig. Zo niet, installeer git dan zo:

sudo apt-get install git

Voor we verder gaan moeten we eerst controleren of ons dhparam bestand aangemaakt is. Hiervoor openen we de tmux sessie die op de achtergrond draait.

tmux a -t dhparam

Als het goed is zou de generatie van de sleutels nu klaar moeten zijn. Is dat niet het geval (komen er nog ++++ bij) dan moet u nu even wachten tot de generatie compleet is afgerond. Zodra het dhparam bestand is aangemaakt, kunt de u de tmux sessie afsluiten: (LET OP!!! Sluit de tmux sessie pas af als de dhparam compleet is gegenereerd!!!)

exit

 

Nu gaan we de Let's Encrypt certbot utility klonen.

sudo git clone https://github.com/certbot/certbot /etc/letsencrypt

Pas nu het Nginx website configuratie bestand aan. (LET OP!!! Wijzig in deze regel [UW-DOMEINNAAM.NL] in de door u gebruikte domeinnaam)

sudo nano /etc/nginx/sites-available/[UW-DOMEINNAAM.NL]

Plak deze regel in het zojuist geopende bestand binnen de server tags:

include /etc/nginx/template/letsencrypt.conf;

Zo ziet het er dan ongeveer uit:

server {

    [...]

    include /etc/nginx/template/letsencrypt.conf;

    [...]

}

Sluit het bestand en sla het op.

Herstart de webserver zodat de wijziging geactiveerd word met:

sudo /etc/init.d/nginx restart

Nu kunnen we het daadwerkelijke certificaat gaan aanvragen bij Let's Encrypt.

Pas het volgende commando aan met uw eigen gegevens!!! Let vooral op de laatste vermelding in de regel dat de WWW voor uw domein-naam niet ontbreekt!

sudo /etc/letsencrypt/certbot-auto certonly --webroot --agree-tos --email [UW-EMAIL.NL] -w /web/www/[UW-WEBSITE.NL]/public-html -d [UW-WEBSITE.NL] -d [WWW.UW-WEBSITE.NL]

Als de configuratie juist is ingesteld, dan is het SSL certificaat geldig voor 90 dagen.Het certificaat moet dus regelmatig verlengd worden. Let's Encrypt staat toe dat de verlenging al na 60 dagen kan plaatsvinden. Dit proces gaan we automatiseren zodat de verlenging van het certificaat gewoon doorloopt en u er geen omkijken naar heeft. We maken hierbij gebruik van crontab.

We gebruiken de crontab van root:

sudo crontab -e

Voeg aan het eind van dit bestand de volgende regel toe, en sla op met CTRL+X en Y

0 6 * * * /etc/letsencrypt/certbot-auto renew --text >> /etc/letsencrypt/certbot/certbot-cron.log > /dev/null 2>&1 && sudo service nginx reload

Om te testen of alles goed werkt kunt u een zogenaamde dryrun uitvoeren. Hierbij word de verlenging van het certificaat gesimuleerd.

sudo /etc/letsencrypt/certbot-auto renew --dry-run

Nu het certificaat is aangevraagd, gaan we het toevoegen aan de website zodat het daadwerkelijk gebruikt kan worden. Hiervoor moeten we het website configuratie bestand van Nginx wat aanpassen.

LET OP!! Pas in deze regel [UW-WEBSITE] aan in de door u gebruikte domeinnaam (uiteraard zonder de haakjes te gebruiken!)

sudo nano /etc/nginx/sites-available/[UW-WEBSITE.NL]

 

Zorg ervoor dat de configuratie er ongeveer zo uitziet: LET OP!!! Pas in het onderstaande configuratie bestand de domein naam aan!!!

 

server {

    listen 80 default_server;
    listen [::]:80 default_server;

    server_name UW-WEBSITE.NL WWW.UW-WEBSITE.NL;

    include /etc/nginx/template/letsencrypt.conf;

    return 301 https://$server_name$request_uri;

}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    server_name UW-WEBSITE.NL WWW.UW-WEBSITE.NL;

    index index.php index.html index.htm;

    root /var/www/[UW-WEBSITE.NL]/public-html;

    charset utf-8;
    server_tokens off;
    sendfile off;
    fastcgi_intercept_errors on;

    error_log /var/www/[UW-WEBSITE.NL]/logs/error.log error;
    access_log /var/www/[UW-WEBSITE.NL]/logs/access.log;

    include /etc/nginx/template/SSL.conf;
    include /etc/nginx/template/letsencrypt.conf;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param HTTPS on;
    }
}

 Nu starten we Nginx opnieuw op om de configuratie te activeren:

sudo /etc/init.d/nginx restart

 Nu kunt u testen of alles goed werkt door in uw browser naar uw website te gaan. Als alles goed staat, word u doorgestuurd van http naar https en ziet u een groen slotje in uw browser.

Creative Commons-Licentie
Dit werk valt onder een Creative Commons Naamsvermelding-NietCommercieel 4.0 Internationaal-licentie.

 

 

 

 

 

 

Real time web analytics, Heat map tracking