ssl certificaten en https uitgelegd
Ssl Certificaten En Https Uitgelegd
SSL-certificaten en HTTPS uitgelegd
Dit artikel legt uit hoe SSL/TLS-certificaten en HTTPS werken en hoe je ze implementeert. Gericht op developers en systeembeheerders die een website beveiligen.
Vereisten
- Een webserver met root-/admin-toegang (Apache 2.4+, Nginx 1.18+ of equivalent) - Domeinnaam met DNS-beheer - OpenSSL 1.1.1+ geïnstalleerd - Toegang tot e-mail op het domein (voor validatie)
Stappen
1. Genereer een private key en Certificate Signing Request (CSR)
```bash openssl req -new -newkey rsa:2048 -nodes -keyout voorbeeld.com.key -out voorbeeld.com.csr ```
Vul de organisatiegegevens in. De Common Name (CN) moet exact overeenkomen met het domein dat je beveiligt (bijv. `www.voorbeeld.com`).
2. Kies een Certificeringsautoriteit (CA) en dien de CSR in
Gebruik een CA zoals Let's Encrypt (gratis, automatisering via Certbot), DigiCert of Sectigo. Upload het CSR-bestand via hun portal. Let's Encrypt-gebruikers kunnen direct naar stap 3 met Certbot.
3. Valideer domeinbezit
De CA controleert of jij de domeineigenaar bent via een van deze methoden:
- E-mail: stuur een bevestigingslink naar `admin@voorbeeld.com` - DNS: voeg een TXT-record toe met een opgegeven waarde - HTTP: plaats een validatiebestand op `http://voorbeeld.com/.well-known/acme-challenge/`
Voor Let's Encrypt met Certbot: ```bash certbot certonly --standalone -d voorbeeld.com -d www.voorbeeld.com ```
4. Installeer het SSL/TLS-certificaat op de webserver
Plaats de certificaatbestanden op de server:
- Apache: `/etc/ssl/certs/voorbeeld.com.crt` en `/etc/ssl/private/voorbeeld.com.key` - Nginx: `/etc/nginx/ssl/voorbeeld.com.crt` en `/etc/nginx/ssl/voorbeeld.com.key`
Let op: gebruik het fullchain-bestand (inclusief tussenliggende certificaten), niet alleen het domeincertificaat.
5. Configureer HTTPS in de webserver
Apache (`/etc/apache2/sites-available/voorbeeld.com-ssl.conf`):
```apache
SSLEngine on SSLCertificateFile /etc/ssl/certs/voorbeeld.com.crt SSLCertificateKeyFile /etc/ssl/private/voorbeeld.com.key SSLCertificateChainFile /etc/ssl/certs/ca-bundle.crt ```
Nginx (`/etc/nginx/sites-available/voorbeeld.com`): ```nginx server { listen 443 ssl; server_name voorbeeld.com;
ssl_certificate /etc/nginx/ssl/voorbeeld.com.crt; ssl_certificate_key /etc/nginx/ssl/voorbeeld.com.key;
root /var/www/voorbeeld.com; } ```
6. Herstart de webserver
```bash Apache systemctl restart apache2
Nginx systemctl restart nginx ```
7. Forceer HTTPS via redirect
Voeg een redirect toe van HTTP naar HTTPS:
Apache (in `.htaccess` of VirtualHost): ```apache RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] ```
Nginx (in serverblock voor poort 80): ```nginx server { listen 80; server_name voorbeeld.com www.voorbeeld.com; return 301 https://$server_name$request_uri; } ```
Verificatie
Controleer de certificaatconfiguratie met SSL Labs of lokaal:
```bash openssl s_client -connect voorbeeld.com:443 -servername voorbeeld.com ```
Zoek naar `Verify return code: 0 (ok)` en een geldige certificaatketen. Of gebruik online: https://www.ssllabs.com/ssltest/
Veelgestelde problemen
1. "Dit certificaat is verlopen" Sinds september 2020 is de maximale geldigheidsduur 398 dagen. Stel een herinnering in of automatiseer verlenging met Certbot.
2. "Certificate chain incomplete" Apachen/Nginx mist tussenliggende certificaten. Gebruik het fullchain-bestand (niet alleen `.crt`) of voeg `SSLCertificateChainFile` toe.
3. "HTTPS werkt, maar mixed content waarschuwingen" Laad alle resources (CSS, JS, afbeeldingen) via HTTPS. Vervang `http://` door `https://` in HTML en gebruik relative URLs of Content-Security-Policy headers.
Certificaten zijn geen eenmalige setup. Plan verlenging in je workflow.