ssl certificaten en https uitgelegd
Ssl Certificaten En Https Uitgelegd
SSL-certificaten en HTTPS uitgelegd
Dit artikel legt uit wat SSL/TLS-certificaten zijn en hoe je HTTPS correct implementeert op je Pixzo-server.
Vereisten
- Toegang tot je 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 je domein:
```bash openssl req -new -newkey rsa:2048 -nodes -keyout jouwdomein.key -out jouwdomein.csr ```
Vul tijdens het proces je 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:
```bash sudo certbot certonly --standalone -d jouwdomein.nl -d www.jouwdomein.nl ```
Certbot plaatst het certificaat in `/etc/letsencrypt/live/jouwdomein.nl/`.
3. Download de intermediate certificate
Haal de juiste intermediate certificate chain voor je CA. Voor Let's Encrypt is dit automatisch meegeleverd. Controleer de keten:
```bash openssl crl2pkcs7 -nocrl -certfile /etc/letsencrypt/live/jouwdomein.nl/fullchain.pem | openssl pkcs7 -print_certs -text | grep "Subject:" ```
4. Configureer je webserver voor TLS 1.2 of hoger
Voeg in je Apache virtual host of Nginx server block de volgende configuratie:
```apache 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 on ```
```nginx Nginx 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 je cipher configuratie:
```bash OpenSSL test: RC4 mag niet voorkomen openssl ciphers -v 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256' | grep -i rc4 ```
6. Zet HTTP-naar-HTTPS redirect aan
Voeg een redirect toe naar HTTPS voor al het HTTP-verkeer:
```apache
7. Herlaad de serverconfiguratie
Pas de wijzigingen toe zonder downtime:
```bash sudo systemctl reload apache2 voor Apache sudo systemctl reload nginx voor Nginx ```
8. Stel automatische vernieuwing in (Let's Encrypt)
Certbot kan certificaten automatisch verlengen. Test de vernieuwing:
```bash sudo certbot renew --dry-run ```
Voeg een cronjob toe voor dagelijkse controle (`0 3 * /usr/bin/certbot renew --quiet`).
Verificatie
Controleer of je HTTPS correct werkt:
```bash 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:
```bash openssl s_client -connect jouwdomein.nl:443 -servername jouwdomein.nl 2>/dev/null | openssl x509 -noout -dates -subject -issuer ```
Veelgestelde problemen
Certificaat wordt niet vertrouwd door browser
De intermediate certificate ontbreekt in de keten. Hele keten moet worden meegeleverd — controleer met: ```bash openssl s_client -connect jouwdomein.nl:443 -showcerts | grep "s:" | uniq ``` Je ziet het rootcertificaat niet; alleen het eindcertificaat en intermediate 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: ```bash timedatectl status ``` Forceer NTP-sync: `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/`.