Zoals ik in een eerdere blog heb uitgelegd draai ik deze blog thuis op mijn eigen Debian (Jessie) server gebasseerd op Apache2 webserver software. Ik maak dus geen gebruik van een hosting-provider en heb alles zelf in de hand. Ik heb op mijn router een port-forward aangemaakt die al het verkeer voor poort 80 omleid naar het IP adres van mijn Debian server. Verder heb ik bij DynDNS een account zodat de DNS entry ‘eye-vision.homeip.net’ altijd wijst naar het IP adres dat ik van Ziggo heb gekregen op mijn modem.

Het verkeer naar poort 80 gaat altijd onbeveiligd en dat brengt risico’s met zich mee. Als je bijvoorbeeld met een Open Wifi connectie browsed naar je site dan zou iemand al het verkeer kunnen sniffen en kunnen meelezen. Een simpele oplossing hiervoor is gebruik te maken van SSL/TLS beveiliging waarbij al je verkeer beveiligd wordt met een SSL/TLS certificaat. Een SSL/TLS certificaat op je website voorkomt onderschepping van leesbare gegevens tijdens verzending en kan een legitieme website onderscheiden van een phishing website. Voor de gebruiker verandert alleen maar de URL. Deze moet dan HTTPS gebruiken in plaats van HTTP. Een bijkomend voordeel van het gebruik van HTTPS boven HTTP is het feit dat Google sites met ondersteuning van SSL/TLS beloont met een hogere ranking in de zoek resultaten.

Nu kostten SSL/TLS certificaten in het verleden altijd geld. Sinds kort is daar verandering in gekomen met Let’s Encrypt die gratis certificaten uitgeeft die 90 dagen geldig zijn. Wereldwijd wordt hier al erg veel gebruik van gemaakt.

In deze blog leg ik uit hoe ik mijn blog heb omgezet naar het gebruik van HTTPS boven HTTP.

Voeg als eerste backports (= hergecompileerde (meestal) test en onstabiele software die je kunt gebruiken in een stabiele omgeving zonder gebruik te maken van nieuwe libraries) toe aan je ‘/etc/apt/sources.list’ file:

deb http://ftp.debian.org/debian jessie-backports main

Zorg er nu voor dat je in je router de port-forward voor poort 443 hebt ingesteld naar het IP adres van je Debian Server.

Installeer nu de scripts van Let’s Encrypt met het volgende commando:

apt-get install python-certbot-apache -t jessie-backports

Je hoeft nu alleen maar het volgende commando te runnen en de vragen te beantwoorden:

certbot

De SSL/TLS certficaten van Let’s Encrypt zijn 90 dagen geldig en je moet er dus voor zorgen dat je deze voor deze tijd vernieuwd. Let’s Encrypt zal automatisch al een cron job voor je aanmaken voor het automatisch vernieuwen van je SSL/TLS certificaat (met commando ‘certbot renew’). Als je je certificaat wilt controlen dan kun je dat doen met het volgende commando:

certbot renew --dry-run

Als alternatief kun je met het volgende commando de exacte data checken van de geldigheid van je certificaat:

echo | openssl s_client -connect :443 2>/dev/null | openssl x509 -noout -dates

Dit commando geeft dan de volgende vergelijkbare output:

notBefore=Dec 10 09:42:00 2016 GMT
notAfter=Mar 10 09:42:00 2017 GMT

Vanaf nu kun je je site vanaf HTTPS benaderen. Als je wilt dat automatisch al het verkeer naar je HTTP verbinding wordt omgeleid naar HTTPS, dan moet je de volgende regels toevoegen aan je ‘/etc/apache2/sites-available/000-default.conf’ file (‘example.com’ natuurlijk veranderen naar jouw URL):

<VirtualHost *:80>
   ServerName example.com
   Redirect / https://example.com/
</VirtualHost>

Na deze aanpassing moet je je apache2 process even opnieuw opstarten:

/etc/init.d/apache2 restart

Update 04 Januari 2017:
In de plaats van de ‘000-default.conf’ file aan te passen is het beter/handiger om de volgende regels aan de .HTACCESS file (in de root van je site) toe te voegen:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>

Je zult nu zien dat voortaan al je verkeer naar je site via een beveiligde HTTPS verbinding gaat:




Het omzetten van mijn site van HTTP naar HTTPS was letterlijk maar een paar minuten werk en stelt echt niet heel veel voor. Dit zou eigenlijk iedereen moeten doen voor een veiligere wereld.