Table des matières
Web server - HTTPS grade A
Date: 2022 Installation faite sur Debian 11
La configuration restreint les navigateurs utilisables - Internet Explorer 11* - Chrome 70 - Firefox 63
Objectif de cette article: Obtenir un serveur répondant en HTTPS from scratch avec un grade A+
Pré-requis:
Debian 11 (Voir cet article)
Note: On partira d'un serveur vierge avec uniquement le package apache2 d'installé apt install apache2 -y
Activation SSL sur Apache2
Il est nécessaire d'activer l'écoute sur le protocol 443 dans le fichier /etc/apache2/ports.conf. Le port 80 doit rester ouvert pour la négociation du certificat
# /etc/apache2/ports.conf Listen 80 Listen 443
Quelques mods à activer:
a2enmod ssl a2enmod headers a2enmod http2
- Liste à pucemod_ssl: Active la gestion du SSL/TLS
- mod_headers: Personnalisation des en-têtes HTTP. Il sera utilisé pour informer le navigateur d'utiliser exclusivement HTTPS
- http2: Plus rapide que HTTP/1.1, élimite d'anciens protocols de sécurité obsolète
Certbot
Source: https://certbot.eff.org/instructions?ws=apache&os=debianbuster
# Installation de snapd apt install snapd snap install core snap refresh core # Installation de certbot snap install --classic certbot ln -s /snap/bin/certbot /usr/bin/certbot # On configure Let's Encrypt pour notre serveur: certbot --apache
✅ A partir d'ici, notre site devrait être en HTTPS certifié Let's Encrypt avec une configuration déjà correct faite par Certbot
Le renouvellement se fait automatiquement, il y a un timer dans systemd. Il peut être simulé (dry-run) avec cette commande: certbot renew –dry-run
Modifications constatée dans la configuration Apache2:
/etc/apache2/sites-enabled/<ssl-conf>.conf
<VirtualHost *:443> # ... SSLEngine on SSLCertificateFile /etc/letsencrypt/live/httpslabs.gh3.be/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/httpslabs.gh3.be/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf # ... </VirtualHost>
Amélioration de la sécurité
Source: https://ssl-config.mozilla.org/
On se base sur une configuration “moderne” proposé par Mozilla
Redirection HTTP vers HTTPS.
Note: Cette manipulation n'est pas idéale car du man-in-the-middle est toujours possible le temps de la redirection vers HTTPS
Note2: Le port 80 ne peut pas être fermé car (historiquement ?) le fichier .well-known-challenge utilisé par Let's Encrypt passe par HTTP
/etc/apache2/sites-enabled/<http-conf>.conf
<VirtualHost *:80> # ... RewriteEngine On RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/ RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L] # ... </VirtualHost>
/etc/apache2/sites-enabled/<https-conf>.conf
<VirtualHost _default_:443> # ... # Activation de HTTP/2, rétrocompatibilité vers HTTP/1.1 si besoin (mod_http2 Protocols h2 http/1.1 # Activation du HTTP Strict Transport Security (mod_header) Header always set Strict-Transport-Security "max-age=63072000" # ... </VirtualHost> # OCSP Stapling - https://fr.wikipedia.org/wiki/Agrafage_OCSP SSLUseStapling On SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
Modification du chiffrement
On a remarqué précédemment que Certbot a créé un fichier de configuration des options SSL, on modifiera là dedans.
/etc/letsencrypt/options-ssl-apache.conf
# ... # SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLProtocol TLSv1.2 TLSv1.3 #SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305 # ...
2 changements ici :
- Support de TLSv1.2 et TLSv1.3
Note: curl 7.83.1 ne supporte pas TLSv1.3
Note2: Internet Explorer 11 ne supporte pas TLSv1.3
https://caniuse.com/tls1-3 - Désactivation des protocoles DHE-RSA-AES128-GCM-SHA256 et DHE-RSA-AES256-GCM-SHA384
DH (Diffie Hellman) est déprécié par rapport à Eliptic Curve Diffie-Hellman (ECDH)
