Als je over het internet surft is het je misschien wel eens opgevallen, je bekijkt een website en je browser heeft in de adresbalk, voor de domeinnaam van de site waar je nu op zit te kijken, de tekst "Niet beveiligd" toegevoegd. Jij kunt gewoon de website bekijken, dus eigenlijk interesseert het jou niet dat dit daar staat. Maar als dit bij de website van jouw bank getoond zou worden (ING, Rabobank, etc.) dan moeten er alarmbellen gaan rinkelen. Want dan zit je waarschijnlijk op een fake-site te kijken waar mensen jouw geld willen afboeken zonder dat je het weet of de bank heeft een probleem. Want die gegevens, het inloggen met je Rabo Reader, TAN-code en wat al niet meer, dat moet via HTTPS gebeuren. Dat zijn namelijk gegevens die niet afgetapt mogen worden. Met HTTP is dat wel mogelijk, met HTTPS gaan de door jou ingetypte codes geëncrypt over de lijn en zijn dus door iemand anders niet te bekijken.
De internet-community wil steeds meer dat eigenlijk alle sites op HTTPS gaan draaien. Daarom ook die melding in je browser. En de Google zoekmachine geeft websites met HTTPS een betere ranking dan HTTP websites. Het is nog net niet dat er een grote melding op je scherm komt "weet je zeker dat je naar deze mogelijk onveilige site wilt door surfen", maar wie weet is dat over een half jaar wel zo. Mocht je een eigen website hebben, dan is het dus een goede zaak dat je gaat zorgen dat jouw site op HTTPS draait om zo de wereld weer een stukje veiliger te maken. Op zich ook wel logisch, want als iemand mijn inloggegevens aftapt terwijl ik inlog op mijn Wordpress-website en hij/zij kan vervolgens allemaal malware op mijn site installeren, dan heb je een probleem.
Mocht je zelf niet over de mogelijkheid beschikken om je site zo in te stellen, of ga je er niet over, meldt het bij iemand die er wel actie op kan ondernemen of stem dit af met de leverancier van jouw website.
Mocht je wel die mogelijkheid hebben (omdat het bijvoorbeeld een persoonlijke website is), lees in dat geval verder.
SSL-certificaten
Als je website op HTTPS bereikbaar moet zijn, moet er een SSL-certificaat geïnstalleerd worden. Soms kun je dat zelf doen, meestal kun je in een eigen admin-omgeving van je website aan aanvraag indienen om het te installeren en zorgt vervolgens degene die jouw website host dat het geïnstalleerd wordt.
Ik heb een aantal websites en deze bij verschillende hosters draaien. Zo heb ik een site draaien bij Sohosted, daar kun je een COMODO-certificaat aanvragen. In de admin-omgeving van Strato en VDX kan ik ook SSL-certificaten aanvragen. Ik wil nog even twee hostingpartijen extra benoemen. Zo biedt De Heeg een gratis Let's Encrypt SSL certificaat aan, hetzelfde geldt voor One.com. Let wel, dit komt omdat Let's Encrypt het doel heeft om veel sites HTTPS te maken en de certificaten nu gratis aan biedt. In de toekomst kan dat natuurlijk wel veranderen, want ook die partij zal zijn geld moeten verdienen. Let's Encrypt hoeft dat nu nog niet te doen, omdat grotere partijen met geld dit initiatief steunen.
Website configureren
Ik ga er vanuit dat je het SSL certificaat aangevraagd hebt, de hoster het geïnstalleerd heeft en jouw site nu zowel op HTTP als HTTPS te bereiken is. Let op: dwing nog niet alleen het bereikbaar zijn op HTTPS af, je moet eerst nog wat controles uitvoeren!
Op de meeste websites staat wel een plaatje, wordt er met CSS een bepaalde opmaak qua lettertypes, kleuren, positionering van items toegevoegd, heb je javascript (bijvoorbeeld jQuery) op je site zodat je jouw berichten makkelijk kunt delen naar Facebook, Twitter, Instagram en heb je in jouw berichten Youtube of Vimeo-filmpjes staan, aangevuld met jouw foto's die op Instagram staan mooi in een eigen overzicht. Tot zover helemaal goed.
Open jouw site nu met https:// in plaats van http:// ervoor en kijk nog eens goed. Wordt je website nog goed getoond? Of is bijvoorbeeld die Youtube-video ineens verdwenen?
Dat ligt aan het feit dat als jouw site "veilig" is geworden, dus via https geleverd wordt, ook alle items binnen jouw website via https geladen moeten worden. Je zult hiervoor dus code in jouw website aan moeten passen om dat werkend te krijgen.
<!-- dit gaat dus niet meer werken... -->
<link href="http://www.jouwsite.nl/wp-content/themes/mijnthema/css/bootstrap.min.css" rel="stylesheet">
<script src="http://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="http://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
.....
<iframe width="500" height="281" src="http://www.youtube.com/embed/AEnnwHklolY?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
Je kunt het jezelf wat makkelijker maken. Start Google Chrome. Je komt dan meestal op een blanco pagina of de Google zoekpagina binnen. Houdt de CTRL-toets en de SHIFT-toets ingedrukt en druk dan op de letter i. Je ziet nu dat je onderin het scherm een extra overzicht erbij krijgt. Je komt binnen op het tabblad console. Mocht dat niet zo zijn, ga dan naar dit tabblad toe. Open vervolgens jouw website met https ervoor. Als je in jouw pagina nog zaken in laadt met http zie je de foutmeldingen in de console voorbij komen. Dan weet je waar het vandaan komt en waar je de fixes moet doorvoeren.
Bij https moeten de zaken die ingeladen worden via https ingeladen worden, als je via http de site bekijkt mogen onderdelen zowel via https als via http ingeladen worden, dat maakt geen verschil. Hierdoor kun je jouw herstelacties rustig doorvoeren en hebben de mensen die jouw site via http bekijken er geen last van.
HTTPS afdwingen
Als je dat allemaal gedaan hebt, dan wordt het tijd om af te dwingen dat mensen die jouw site bezoeken altijd naar https gaan. Afhankelijk van het type hosting dat je hebt zul je dit moeten aanpassen in het .htaccess bestand of in het web.config bestand wat in de hoofdmap / www-map van jouw website staat. Staat die er nog niet? Dan moet je deze dus aanmaken. Over het algemeen geldt dat als je een website met PHP-pagina's hebt je waarschijnlijk een .htaccess bestand moet aanpassen (Wordpress, Joomla, Drupal) en als je een .NET website hebt (ASPX bestanden, CSHTML-Razor-bestanden) het in dat geval een web.config bestand moet zijn.
De exacte syntax van die bestanden ga ik hier niet toelichten, alleen hoe je deze "redirects" moet toevoegen. Want dat moet wel goed natuurlijk. Als iemand http://www.jouwsite.nl/artikelen/hoe-verdien-ik-geld aanroep en vervolgens doorgestuurd wordt naar https://www.jouwsite.nl/ en niet naar https://www.jouwsite.nl/artikelen/hoe-verdien-ik-geld dan is dat behoorlijk gebruiks-onvriendelijk. Ik zit zelf ook nog wel eens te zoeken via Google hoe de juiste syntax ook alweer was, want sommige voorbeelden die je online vindt, die werken niet bij alle providers. En daardoor gaat het soms fout, omdat je de bezoeker doorstuurt naar de HTTPS-variant van de pagina, wel met HTTPS binnen komt, maar dat niet goed afvangt, weer doorstuurt naar de HTTPS-variant van de pagina en zo in een eindeloze loop komt. Dat moeten we natuurlijk voorkomen :)
Daarom even de voorbeelden zoals ze bij mij werken. Of ze bij jou werken, dat merk je na het toevoegen en controleren van je website. De ene omgeving snapt namelijk de controle op != on wel, de andere juist niet en heeft de "off"-controle nodig.
# .HTACCES SYNTAX bij mijn ene siteRewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# .HTACCESS SYNTAX bij mijn andere site
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
<!-- WEB.CONFIG SYNTAX -->
<configuration>
...
<system.webServer>
<rewrite>
<rules>
<rule name="HTTPS afdwingen" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="permanent" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
...
</configuration>