Cet article vous guidera à travers la configuration de la terminaison SSL sur HAProxy, pour chiffrer le trafic via HTTPS. Nous utiliserons un certificat SSL auto-signé pour le nouveau frontend. Il est supposé que HAProxy est déjà installé et configuré avec un frontend HTTP standard.
Exigences
- Vultr VPS
- HAProxy 1.5
- Ubuntu 14.04 LTS (devrait fonctionner sur d'autres versions et distribution)
Générer un certificat et une clé privée
Exécutez les lignes de code suivantes pour générer une clé privée et un certificat auto-signé qui fonctionnera avec HAProxy.
openssl genrsa -out /etc/ssl/private/server.key 2048
mkdir /etc/ssl/csr
openssl req -new -key /etc/ssl/private/server.key -out /etc/ssl/csr/server.csr
openssl x509 -req -days 365 -in /etc/ssl/csr/server.csr -signkey /etc/ssl/private/server.key -out /etc/ssl/certs/server.crt
cat /etc/ssl/certs/server.crt /etc/ssl/private/server.key > /etc/ssl/certs/server.bundle.pem
La première chose à faire est de vous assurer que SSLv3 est désactivé. En raison de l'attaque POODLE, SSLv3 n'est plus considéré comme sécurisé. Toutes les applications et tous les serveurs doivent utiliser TLS 1.0 et supérieur. À l'aide de votre éditeur de texte préféré, ouvrez le fichier /etc/haproxy/haproxy.cfg
. À l'intérieur, recherchez la ligne ssl-default-bind-options no-sslv3
sous la global
section. Si vous ne le voyez pas, ajoutez cette ligne à la fin de la section avant la defaults
section. Cela garantira que SSLv3 est désactivé à l'échelle mondiale. Vous pouvez également le définir dans vos sections frontales, mais il est recommandé de le désactiver globalement.
Sur la configuration HTTPS. Créez une nouvelle section frontend nommée web-https
.
frontend web-https
bind public_ip:443 ssl crt /etc/ssl/certs/server.bundle.pem
reqadd X-Forwarded-Proto:\ https
rspadd Strict-Transport-Security:\ max-age=31536000
default_backend www-backend
Expliquer:
bind public_ip:443
(changer public_ip
votre IP publique VPS) indique à HAProxy d'écouter toute demande envoyée à l'adresse IP sur le port 443
(le port HTTPS).
ssl crt /etc/ssl/certs/server.bundle.pem
indique à HAProxy d'utiliser le certificat SSL généré précédemment.
reqadd X-Forwarded-Proto:\ https
ajoute l'en-tête HTTPS à la fin de la demande entrante.
rspadd Strict-Transport-Security:\ max-age=31536000
une politique de sécurité pour éviter les attaques de déclassement.
Vous n'avez pas besoin d'apporter de modifications supplémentaires à votre section backend.
Si vous souhaitez que HAProxy utilise HTTPS par défaut, ajoutez redirect scheme https if !{ ssl_fc }
au début de la www-backend
section. Cela forcera la redirection HTTPS.
Enregistrez votre configuration et exécutez service haproxy restart
pour redémarrer HAPRoxy. Vous êtes maintenant prêt à utiliser HAProxy avec un point de terminaison SSL.