SSL-certificaten en HTTPS uitgelegd
SSL-certificaten en HTTPS uitgelegd
Dit artikel legt uit wat SSL/TLS-certificaten zijn en hoe u HTTPS correct implementeert op uw Pixzo-server.
Vereisten
- Toegang tot uw webserver (Apache 2.4.41+ of Nginx 1.18+) - Domeinnaam met DNS-beheer - Root- of sudo-toegang via SSH - OpenSSL versie 1.1.1 of hoger geïnstalleerd
Stappen
1. Genereer een private key en CSR
Maak een 2048-bit RSA private key en een Certificate Signing Request (CSR) voor uw domein:
openssl req -new -newkey rsa:2048 -nodes -keyout jouwdomein.key -out jouwdomein.csr
Vul tijdens het proces uw domeinnaam (Common Name) en organisatiegegevens in.
2. Vraag een certificaat aan bij een CA
Gebruik Let's Encrypt voor een gratis DV-certificaat via Certbot:
sudo certbot certonly --standalone -d jouwdomein.nl -d www.jouwdomein.nl
Certbot plaatst het certificaat in `/etc/letsencrypt/live/jouwdomein.nl/`.
3. Download het tussenliggende certificaat
Haal de juiste tussenliggende certificaatketen op voor uw CA. Voor Let's Encrypt wordt dit automatisch meegeleverd. Controleer de keten:
openssl crl2pkcs7 -nocrl -certfile /etc/letsencrypt/live/jouwdomein.nl/fullchain.pem | openssl pkcs7 -print_certs -text | grep "Subject:"4. Configureer uw webserver voor TLS 1.2 of hoger
Voeg in uw Apache virtual host of Nginx server block de volgende configuratie toe:
Apache
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/jouwdomein.nl/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/jouwdomein.nl/privkey.pem
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
SSLHonorCipherOrder onNginx
ssl_certificate /etc/letsencrypt/live/jouwdomein.nl/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jouwdomein.nl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;5. Verwijder zwakke cipher suites
Sluit RC4, SHA-1 en 3DES uit in uw cipherconfiguratie:
OpenSSL-test: RC4 mag niet voorkomen
openssl ciphers -v 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256' | grep -i rc46. Zet HTTP-naar-HTTPS-omleiding aan
Voeg een omleiding naar HTTPS toe voor al het HTTP-verkeer:
<VirtualHost *:80>
ServerName jouwdomein.nl
Redirect permanent / https://jouwdomein.nl/
</VirtualHost>7. Herlaad de serverconfiguratie
Pas de wijzigingen toe zonder onderbreking:
sudo systemctl reload apache2 voor Apache
sudo systemctl reload nginx voor Nginx8. Stel automatische vernieuwing in (Let's Encrypt)
Certbot kan certificaten automatisch verlengen. Test de vernieuwing:
sudo certbot renew --dry-run
Voeg een cronjob toe voor dagelijkse controle (`0 3 * /usr/bin/certbot renew --quiet`).
Verificatie
Controleer of uw HTTPS correct werkt:
curl -vI https://jouwdomein.nl 2>&1 | grep -E "(SSL connection|TLS|HTTP/2)"
Gebruik de SSL Labs-test (ssllabs.com/ssltest) of de OpenSSL s_client:
openssl s_client -connect jouwdomein.nl:443 -servername jouwdomein.nl 2>/dev/null | openssl x509 -noout -dates -subject -issuerVeelgestelde problemen
Certificaat wordt niet vertrouwd door de browser
Het tussenliggende certificaat ontbreekt in de keten. De volledige keten moet worden meegeleverd — controleer met:
openssl s_client -connect jouwdomein.nl:443 -showcerts | grep "s:" | uniq
U ziet het rootcertificaat niet; alleen het eindcertificaat en het tussenliggende certificaat moeten zichtbaar zijn. Voeg bij Apache `SSLCertificateChainFile` of bij Nginx het volledige chain-bestand toe.
Foutmelding "certificate has expired" na installatie
Controleer of de systeemtijd correct is gesynchroniseerd:
timedatectl status
Forceer NTP-synchronisatie: `sudo timedatectl set-ntp true`.
TLS 1.0 of 1.1 nog actief ondanks configuratie
Sommige load balancers of reverse proxies herschrijven de SSL-configuratie. Controleer of er geen globale SSL-instellingen in `/etc/ssl/` of een `ssl.conf`-bestand de lokale instellingen overschrijven met `grep -r "SSLProtocol\|ssl_protocols" /etc/`.