ssl certificaten en https uitgelegd
Ssl Certificaten En Https Uitgelegd
SSL-certificaten en HTTPS uitgelegd
Dit artikel legt uit hoe TLS-certificaten en HTTPS werken voor developers die hun websites willen beveiligen.
Vereisten
- Basiskennis van HTTP en webservers (Apache, Nginx of IIS) - Toegang tot een webserver (root of sudo) - OpenSSL versie 1.1.1 of hoger - Een domeinnaam met DNS-configuratie
Stappen
1. Genereer een Certificate Signing Request (CSR) en private key
Open een terminal op je server en voer uit: ```bash openssl req -new -newkey rsa:2048 -nodes -keyout domein.key -out domein.csr ``` Vul de gevraagde gegevens in. De Common Name (CN) moet exact overeenkomen met je domeinnaam.
2. Vraag een certificaat aan bij een Certificate Authority (CA)
Gebruik Let's Encrypt (gratis, 90 dagen geldig) via Certbot: ```bash sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d voorbeeld.nl -d www.voorbeeld.nl ``` Of voor Apache: ```bash sudo certbot --apache -d voorbeeld.nl ```
3. Controleer de certificaatketen
Certbot slaat bestanden op in `/etc/letsencrypt/live/voorbeeld.nl/`. Controleer of de volledige keten aanwezig is: ```bash ls -la /etc/letsencrypt/live/voorbeeld.nl/ ``` Je ziet `fullchain.pem` (server + intermediates) en `privkey.pem` (private key).
4. Configureer de webserver voor HTTPS
Voor Nginx: voeg in de server block toe: ```nginx server { listen 443 ssl http2; server_name voorbeeld.nl www.voorbeeld.nl; ssl_certificate /etc/letsencrypt/live/voorbeeld.nl/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/voorbeeld.nl/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384; } ```
5. Schakel verouderde protocollen en ciphers uit
Voeg in dezelfde server block toe: ```nginx ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d; ```
6. Stel HTTP naar HTTPS redirect in
Voeg een apart server block toe voor poort 80: ```nginx server { listen 80; server_name voorbeeld.nl www.voorbeeld.nl; return 301 https://$host$request_uri; } ```
7. Test de configuratie en herlaad Nginx
```bash sudo nginx -t sudo systemctl reload nginx ```
8. Automatiseer certificaatvernieuwing
Certbot stelt standaard een cronjob of systemd-timer in. Controleer of deze actief is: ```bash sudo systemctl status certbot.timer ``` Forceer een testvernieuwing: ```bash sudo certbot renew --dry-run ```
Verificatie
1. Open je website in een browser: `https://voorbeeld.nl` 2. Klik op het slotje in de adresbalk — je ziet "Verbinding is veilig" en het certificaat. 3. Test de SSL-configuratie met SSL Labs: ```bash curl https://www.ssllabs.com/ssltest/analyze.html?d=voorbeeld.nl ``` 4. Gebruik `openssl` om handmatig te controleren: ```bash openssl s_client -connect voorbeeld.nl:443 -servername voorbeeld.nl ```
Veelgestelde problemen
Probleem 1: Browser toont "Niet-vertrouwd certificaat" - Oorzaak: Ontbrekende tussenliggende certificaten (intermediates). - Oplossing: Zorg dat `fullchain.pem` wordt gebruikt i.p.v. alleen `cert.pem`.
Probleem 2: HTTP werkt, HTTPS niet - Oorzaak: Firewall blokkeert poort 443. - Oplossing: Open poort 443 met `sudo ufw allow 443/tcp` of cloud-firewallregels.
Probleem 3: Certificaat vernieuwt niet automatisch - Oorzaak: Certbot-timer is uitgeschakeld of versie is verouderd. - Oplossing: Controleer met `sudo certbot renew --dry-run` en upgrade: `sudo apt update && sudo apt upgrade certbot`.
Certificaten blijven een terugkerende taak — zorg dat je vernieuwing test voor de vervaldatum.