HTTPS rules

HTTPS rules

Veiligheid is een heel belangrijk item vindt Google. En daarom heeft Google in haar blog “HTTPS as a ranking signal” aangekondigd dat ze websites geserveerd via HTTPS (dus met een SSL certificaat) ietsie hoger zullen laten positioneren in de zoekresultaten dan vergelijkbare websites via HTTP (zonder een SSL certificaat). Hiermee willen ze website eigenaren motiveren om over te stappen van HTTP naar HTTPS waardoor er een veiliger web ontstaat.

Omtrent HTTPS heerst nog wat onduidelijkheid en in deze blogpost zullen een aantal fabels naar de eeuwige jachtvelden verwezen worden.

Fabel #1 – HTTPS is langzaam

Nee, het gebruik van HTTPS zal je site niet snéller maken. Je plaatst immers een extra laag bovenop je normale dataverkeer. Aan de andere kant mag snelheid geen factor zijn in de keuze tussen HTTPS en HTTP. Als je HTTPS nodig hebt voor je website, dan heb je HTTPS nodig voor je website.

Net als dat je een CMS kunt optimaliseren voor snelheid kun je ook optimalisaties doorvoeren voor SSL. Onderstaande afbeelding laat het resultaat van een meting zien waarbij ik met de website whichloadsfaster.com een productpagina van een webshop geladen via HTTP vergeleken heb met dezelfde pagina geladen via HTTPS. Bij elke test werd het laden van de pagina 10 keer herhaald. De test heb ik vijf keer herhaald en opvallend was dat de gemiddelde laadtijd elke keer ongeveer gelijk was. Ik had een groter verschil verwacht.

whichloadsfaster-downtown-nl

Update februari 2016: Met de komst van HTTP/2 kan deze aanname helemáál naar het land der fabels verwezen worden. Met HTTP/2 is het verkeer dat via HTTPS verloopt zelfs sneller dan verkeer via HTTP. Bij Byte maak je met je Magento shop automatisch gebruik van deze nieuwe techniek (als je SSL gebruikt dan). Lees meer over HTTP/2.

Let op de handshake

Het SSL protocol bestaat uit een aantal protocollen. Een ervan is de handshake protocol waarbij de browser (cliënt) en de server zich aan elkaar voorstellen en de identiteit van elkaar verifiëren. (Dit protocol is beschreven in RFC2246 – pag 29.) Het ziet er als volgt uit:

Zoals je in het schema hierboven kunt zien gaat er vier keer een bericht heen en weer voordat de applicatie data uitgewisseld wordt. Deze handshake protocol wordt elke keer uitgevoerd. Optimalisatie van websites gaat voornamelijk over microsecondes. Activeer Keep-Alive om te voorkomen dat de handshake elke keer uitgevoerd wordt tijdens het downloaden van de pagina.

Het activeren van Keep-Alive via .htaccess:

Voorkom mixed content waarschuwingen

waarschuwing geblokkeerde content

waarschuwing geblokkeerde content

Gebruik relatieve links voor de resources op een pagina in plaats van absolute links. De browser zal een absolute link naar HTTP resources blokkeren als je de pagina bezoekt via HTTPS. Er komt dan een waarschuwing in beeld. Dat zorgt voor vertraging en verwarring bij je bezoekers.

Fabel #2 HTTPS verkeer wordt niet opgeslagen in de browser cache

Omwille de security zal de browser standaard geen content via HTTPS in cache opslaan. Het gevolg is dat javascript, css en afbeeldingen bij elke pagina opnieuw ingeladen worden. Dit kan voorkomen worden door de HTTP header in te stellen als “Cache-Control: public”. (Firefox negeert Cache-Control en bewaart wel alles in cache)

verwerk in .htaccess

Fabel #3 – Mijn website heeft alleen HTTPS nodig bij registratie, login en checkout

Dit idee heeft heel lang geleefd en is nu langzaam aan het wijzigen. Gelukkig.

Op het moment dat je inlogt op een website worden gebruikersnaam en wachtwoord gecontroleerd met de server. De server reageert met een “cookie”, die voor alle andere verzoeken op de website meegezonden wordt. Vele sites zorgen er voor dat de gegevens op de loginpagina netjes versleuteld worden, maar vergeten de rest van de website. De niet versleutelde cookie kwetsbaar is en met bijvoorbeeld Firesheep onderschept kan worden. Het gevolg is dat een hacker dan namens jou zou kunnen inloggen op de betreffende website. In een ruimte met gratis publieke wifi kan een hacker dus vrij eenvoudig met jouw inloggegevens stoute dingen doen. Daarom is HTTPS voor alle pagina ’s van belang. (voorbeeld over Firesheep door Eric Butler)

  • Als webdeveloper wil je de privacy van bezoekers aan je site beschermen. De metadata worden niet versleuteld als je de site in HTTP aanbiedt. Afzonderlijke pagina’s zijn voor hackers niet interessant. Je surfgedrag daarentegen wel.
  • Als webdeveloper wil je je eigen website beschermen tegen aanvallen.

Bij website security heb je het over drie verschillende even belangrijke zaken:

  • Authenticatie
    Praat mijn browser met de server die het zegt te zijn?
  • Data integriteit
    Heeft iemand de verzonden data aangepast?
  • Encryptie
    Kan iemand de conversatie met de server inzien?

HTTPS als SEO variabele

En in de inleiding al benoemd: sinds augustus 2014 neemt Google HTTPS mee in haar algoritme. Met andere woorden: websites met een SSL certificaat krijgen een hogere kwaliteitsscore dan websites zonder, en dus een hogere positie in de zoekresultaten (natuurlijk is dit erg kort door de bocht, de kwaliteitsscore hangt van meer punten af). Tijdens de Google I/O van Juni 2014 geven Pierre Far en Ilya Grigorik tijdens hun presentatie “HTTPS Everywhere” een mooi voorbeeld waarom alle content via HTTPS zou moeten lopen.

Een paar tips voor de overstap naar HTTPS

  • Robots.txt -> zowel de HTTP als de HTTPS versie van je site moeten bereikbaar blijven voor zoekmachines. Als je HTTP verkeer blokkeert kunnen zoekmachines niet de 301 redirects van HTTP naar HTTPS crawlen.
  • Canonical URL -> controleer of de canonical URL ook verwijst naar HTTPS. Het is zonde als je de website via HTTPS serveert en de zoekmachines aangeeft dat ze de HTTP variant moeten indexeren.
  • Controleer of de redirect van HTTP naar HTTPS werkt. En dat de interne links ook HTTPS openen.
  • Maak in Google Webmaster Tools voor zowel http://example.com, http://www.example.com als voor https://example.com en https://www.example.com een container aan.
  • Controleer na livegang via de Google Webmaster Tools of het aantal geindexeerde pagina’s via http daalt naar 0 en de geindexeerde pagina’s via https gaat stijgen. (Als dit niet gebeurt, dan zijn er mogelijk een aantal redirects niet correct, wordt er unsecure data ingeladen of heb je per ongeluk iets geblokkeerd met robots.txt)
  • Controleer na livegang via de Google Webmaster Tools op Crawl Errors.
  • Gebruik je je HTTPS voornamelijk om je site veiliger te maken? Bekijk dan ook eens deze security tips.

Extra fabel #4 SSL certificaten zijn duur

De kosten van certificaten zijn afhankelijk van de situatie waarin je ze gebruikt. Het ene certificaat heeft een uitgebreidere validatieproces (en dus betrouwbaarder en duurder) dan het andere. Je kunt de simpelste vorm van een SSL certificaat al rechtstreeks bij een leverancier afnemen voor €9,- per jaar. Je implementeert het certificaat dan zelf en zorgt ook zelf voor tijdelijke verlenging. Maar je kunt er ook voor kiezen om het certificaat ‘managed’ af te nemen bij een hostingpartij die dat aanbiedt. Bij Byte bieden we onze SSL certificaten op deze manier aan: wij regelen de aanvraag, de validatie, de implementatie en de verlenging voor je. Dat kan al vanaf € 7,50 per maand aanbieden. En dat scheelt je een hoop gedoe. Het verschil tussen managed en unmanaged SSL lichten we ook toe in de blogpost De drie V’s van het SSL certificaat.

Wil jij een SSL certificaat voor jouw website? Kijk voor de verschillende varianten en prijzen op de SSL certificaten-productpagina.

 

Scan je eigen Magento shop op veiligheidslekken