✦ Oplossingen · SSL- en certificaatfouten

SSL-certificaat installeren en https instellen met Let’s Encrypt

Gratis SSL-certificaat installeren en https instellen? Via je hostingpaneel of met certbot, daarna http naar https doorsturen en mixed content voorkomen.

Zo ziet de foutmelding eruit

  • Niet beveiligd
  • Not secure
  • ssl certificaat installeren
  • https verbinding instellen
  • gratis ssl certificaat

Waarom gebeurt dit?

Een SSL-certificaat (technisch tegenwoordig een TLS-certificaat) zorgt ervoor dat je website via https:// werkt. De verbinding tussen bezoeker en server is dan versleuteld, en de browser kan controleren dat hij echt met jouw domein praat. Zonder certificaat toont de browser ‘Niet beveiligd’ naast het adres, en formulieren, inlogpagina’s en betalingen horen dan niet op je site.

Je hoeft er niet voor te betalen. Let’s Encrypt geeft gratis certificaten uit die in alle gangbare browsers worden vertrouwd. Ze zijn kort geldig en worden automatisch verlengd. Bij de meeste hostingpakketten zet je zo’n certificaat met één knop aan; op een eigen server doe je het met het programma certbot.

Een certificaat installeren is stap één. Daarna stuur je alle bezoekers van http door naar https, controleer je of de site geen onderdelen meer via http laadt, en pas als alles stabiel werkt overweeg je HSTS. Wie die volgorde aanhoudt, voorkomt doorverwijzingslussen en halve slotjes.

Zo herken je dit probleem

  • Je site werkt alleen via http://, of de browser toont ‘Niet beveiligd’.
  • Je hebt een nieuwe site of een nieuw (sub)domein en wilt https vanaf het begin goed regelen.
  • Heb je al een certificaat dat verlopen is of niet verlengd wordt, dan helpt SSL-certificaat verlopen of vernieuwen je verder.
  • Werkt https wel maar zonder volledig slotje, dan laadt de site nog iets via http: zie mixed content na SSL.
  • Krijgen bezoekers een certificaatwaarschuwing, kijk dan bij Uw verbinding is niet privé.

Zo los je het op, stap voor stap

Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.

  1. Zorg dat het domein naar je hosting wijst

    Let’s Encrypt controleert of jij het domein beheert door een bestand op je site op te vragen. Dat lukt alleen als het domein, en ook www, in de DNS naar de server wijst waar je het certificaat aanvraagt. Staat er een AAAA-record (IPv6), dan moet ook dat naar dezelfde server wijzen. Net verhuisd? Wacht dan tot de DNS-wijziging door is.

    dig +short voorbeeld.nl A
    dig +short www.voorbeeld.nl A
    dig +short voorbeeld.nl AAAA
  2. Via je hostingpaneel: zet Let’s Encrypt aan

    In vrijwel elk hostingpaneel zit een knop voor een gratis certificaat. Zoek bij je domein naar een onderdeel als SSL/TLS, SSL-certificaten of Let’s Encrypt. In DirectAdmin, cPanel en Plesk heet het net iets anders, maar het principe is hetzelfde: kies het domein, vink zowel voorbeeld.nl als www.voorbeeld.nl aan en vraag het certificaat aan. Zoek daar ook naar een optie om http automatisch naar https door te sturen.

  3. Op een eigen server: installeer certbot

    Op een eigen Linux-server installeer je certbot met de plugin voor je webserver. Op Debian en Ubuntu kan dat via de pakketbeheerder; de makers van certbot raden ook een installatie via snap aan. Zet poort 80 en 443 open in de firewall, want de standaardcontrole loopt via poort 80.

    # Debian / Ubuntu, nginx
    sudo apt install certbot python3-certbot-nginx
    # Apache
    sudo apt install certbot python3-certbot-apache
    
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
  4. Vraag het certificaat aan met alle namen

    Geef elke naam op met -d. Met de nginx- of Apache-plugin past certbot de configuratie zelf aan, en met --redirect zet hij meteen de doorverwijzing naar https erin. Gebruik je een andere webserver, gebruik dan certonly --webroot en zet de paden zelf in je configuratie, met fullchain.pem als certificaat.

    sudo certbot --nginx -d voorbeeld.nl -d www.voorbeeld.nl --redirect
    # Apache
    sudo certbot --apache -d voorbeeld.nl -d www.voorbeeld.nl --redirect
    # andere webserver
    sudo certbot certonly --webroot -w /var/www/html -d voorbeeld.nl -d www.voorbeeld.nl
  5. Stuur http door naar https met een 301

    Elke bezoeker die via http:// binnenkomt, moet met een permanente doorverwijzing (301) naar dezelfde pagina op https://. Heeft certbot of je paneel dat niet gedaan, zet het dan zelf. Laat de doorverwijzing op één plek gebeuren (webserver, paneel of CDN), anders ontstaat er snel een lus: zie ERR_TOO_MANY_REDIRECTS.

    # nginx
    server {
        listen 80;
        server_name voorbeeld.nl www.voorbeeld.nl;
        return 301 https://$host$request_uri;
    }
    
    # Apache (.htaccess)
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  6. Controleer het resultaat

    Open de site met en zonder www en via http://: je moet steeds op https:// uitkomen met een slotje. Met curl zie je de doorverwijzing en met openssl welke namen en welke vervaldatum het certificaat heeft. Een website-scan geeft hetzelfde beeld van buitenaf.

    curl -sI http://voorbeeld.nl/ | head -n 3
    openssl s_client -connect voorbeeld.nl:443 -servername voorbeeld.nl </dev/null 2>/dev/null | openssl x509 -noout -dates -ext subjectAltName
  7. Werk adressen in je site bij

    Afbeeldingen, scripts en interne links die nog naar http:// verwijzen, geven een half slotje of blokkades: dat heet mixed content, zie mixed content na SSL. Gebruik je WordPress, zet dan onder Instellingen › Algemeen het WordPress-adres (URL) en het Siteadres (URL) op https://; doe dat pas als https al werkt, anders kun je jezelf buitensluiten.

  8. Controleer de verlenging en zet HSTS pas later aan

    Test of de automatische verlenging werkt met een droge run. Mislukt die, volg dan SSL-certificaat verlopen of vernieuwen. HSTS (de browser dwingen alleen nog https te gebruiken) zet je pas aan als https een tijd stabiel werkt, en begin dan met een korte max-age. Een fout certificaat met HSTS betekent dat niemand meer kan doorklikken: zie HSTS-fout.

    sudo certbot renew --dry-run
    
    # later, nginx, eerst kort:
    add_header Strict-Transport-Security "max-age=300" always;

Let op: Zet HSTS, en zeker includeSubDomains of preload, niet aan op de dag dat je https instelt. Gaat er daarna iets mis met het certificaat, dan kunnen bezoekers je site niet meer openen en kun je dat niet snel terugdraaien.

Gratis of betaald certificaat: DV, OV en EV

Certificaten verschillen in hoe grondig de uitgever controleert wíe het aanvraagt, niet in hoe goed ze versleutelen. Een gratis certificaat versleutelt even sterk als een betaald.

  • DV (domain validated): alleen gecontroleerd dat je het domein beheert. Dit zijn ook de certificaten van Let’s Encrypt. Voor de meeste websites en webshops genoeg.
  • OV (organization validated): ook de organisatie is gecontroleerd en staat in het certificaat. Bezoekers zien dat alleen als ze de certificaatgegevens openen.
  • EV (extended validation): de strengste controle. Browsers tonen dat tegenwoordig niet meer apart in de adresbalk, dus de meerwaarde voor bezoekers is klein.
  • Een betaald certificaat kan zinvol zijn als een klant, keurmerk of koppeling OV of EV eist, of als een systeem geen automatische verlenging ondersteunt.

Een wildcardcertificaat (*.voorbeeld.nl) kan ook gratis bij Let’s Encrypt, maar dan via een DNS-controle in plaats van poort 80.

Wanneer schakel je hulp in?

  • Je hostingpaneel geeft een foutmelding bij het aanvragen en je weet niet of het aan de DNS of de hosting ligt.
  • Na het instellen van https krijg je een doorverwijzingslus of komt een deel van de site niet meer goed in beeld.
  • Je site draait achter een CDN of proxy, of op meerdere servers, en je weet niet waar het certificaat moet staan.
  • Je hebt een webshop of inlogomgeving en wilt https, doorverwijzingen en HSTS in één keer goed regelen.

Lukt het niet? Wij helpen

Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.

Aanvraag

Hulp aanvragen

Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.

Veelgestelde vragen

Vragen over dit probleem

Is een gratis SSL-certificaat veilig genoeg?

Ja. Een gratis certificaat van Let’s Encrypt versleutelt even sterk als een betaald certificaat. Betaalde OV- en EV-certificaten controleren alleen uitgebreider wie de aanvrager is.

Waarom staat er nog ‘Niet beveiligd’ terwijl ik een certificaat heb?

Vaak opent de site nog via http:// omdat de doorverwijzing ontbreekt, of laadt de pagina onderdelen via http. Stuur http door naar https en kijk bij mixed content.

Hoe zet ik https aan in WordPress?

Installeer eerst het certificaat bij je hosting. Zet daarna onder Instellingen › Algemeen beide adressen op https:// en los resterende http-links op.

Moet ik het certificaat elk jaar vernieuwen?

Een Let’s Encrypt-certificaat is kort geldig en wordt automatisch verlengd door je hosting of door certbot. Controleer wel af en toe of die verlenging werkt.