- Added the ability to display book cover for the category "Lectures" if ISBN cover is available. - Moved author's name into a small tag for better hierarchy and readability. - Implemented a feature to indicate link sizes depending on the number of articles associated with a given tag. - Implemented a mini footer element displaying an RSS feed icon. - Improved category display using description dictionary. - Added a new plugin "isbn_downloader" to fetch ISBN information when needed. - Included the count of articles for each category. - Implemented changes for better layout and readability of tags and categories. - Adjusted the layout of the webpage, improving the overall look of the page. - Included "requests" in the requirements.txt for supplanting dependencies required by the new plugin and/or features.
5.1 KiB
title: Let's Encrypt + HAProxy headline: Comment j'ai mis en place des certificats SSL avec Let's Encrypt derrière haproxy.
Note : Cet article n'est plus à jour. Il est maintenant (2018) possible d'installer des certificats SSL Let's Encrypt d'une manière beaucoup plus simple, en utilisant certbot (et le plugin nginx certbot --nginx
).
It’s time for the Web to take a big step forward in terms of security and privacy. We want to see HTTPS become the default. Let’s Encrypt was built to enable that by making it as easy as possible to get and manage certificates.
Depuis début Décembre, la nouvelle autorité de certification Let's Encrypt est passée en version Beta. Les certificats SSL sont un moyen de 1. chiffrer la communication entre votre navigateur et le serveur et 2. un moyen d'être sur que le site Web auquel vous accédez est celui auquel vous pensez vous connecter (pour éviter des attaques de l'homme du milieu).
Jusqu'à maintenant, il était nécessaire de payer une entreprise pour faire en sorte d'avoir des certificats qui évitent d'avoir ce genre d'erreurs dans vos navigateurs:
Maintenant, grâce à Let's Encrypt il est possible d'avoir des certificats SSL gratuits, ce qui représente un grand pas en avant pour la sécurité de nos communications.
Je viens de mettre en place un procédé (assez simple) qui permet de configurer votre serveur pour générer des certificats SSL valides avec Let's Encrypt et le répartiteur de charge HAProxy.
Je me suis basé pour cet article sur d'autres articles, dont je vous recommande la lecture pour un complément d'information.
Validation des domaines par Let's Encrypt
Je vous passe les détails d'installation du client de Let's Encrypt, qui sont très bien expliqués sur leur documentation.
Une fois installé, vous allez taper une commande qui va ressembler à:
letsencrypt-auto certonly --renew-by-default
--webroot -w /home/www/letsencrypt-requests/ \
-d hurl.kinto-storage.org \
-d forums.kinto-storage.org
Le webroot est l'endroit ou les preuves de détention du domaine vont être déposées.
Lorsque les serveurs de Let's Encrypt vont vouloir vérifier que vous
êtes bien à l'origine des demandes de certificats, ils vont envoyer une
requête HTTP sur http://domaine.org/.well-known/acme-challenge
, ou il
voudra trouver des informations qu'il aura généré via la commande
letsencrypt-auto
.
J'ai choisi de faire une règle dans haproxy pour diriger toutes les
requêtes avec le chemin .well-known/acme-challenge
vers un backend
nginx qui sert des fichiers statiques (ceux contenus dans
/home/www/letsencrypt-requests/
).
Voici la section de la configuration de HAProxy (et la configuration complete si ça peut être utile):
frontend http
bind 0.0.0.0:80
mode http
default_backend nginx_server
acl letsencrypt_check path_beg /.well-known/acme-challenge
use_backend letsencrypt_backend if letsencrypt_check
redirect scheme https code 301 if !{ ssl_fc } !letsencrypt_check
backend letsencrypt_backend
http-request set-header Host letsencrypt.requests
dispatch 127.0.0.1:8000
Et celle de NGINX:
server {
listen 8000;
server_name letsencrypt.requests;
root /home/www/letsencrypt-requests;
}
Installation des certificats dans HAProxy
Vos certificats SSL devraient être générés dans /etc/letsencrypt/live
,
mais ils ne sont pas au format attendu par haproxy. Rien de grave, la
commande suivant convertit l'ensemble des certificats en une version
compatible avec
HAProxy:
cat /etc/letsencrypt/live/domaine.org/privkey.pem /etc/letsencrypt/live/domaine.org/fullchain.pem > /etc/ssl/letsencrypt/domaine.org.pem
Et ensuite dans la configuration de haproxy, pour le (nouveau) frontend https:
bind 0.0.0.0:443 ssl no-sslv3 crt /etc/ssl/letsencrypt
Faites bien attention à avoir un frontend https pour tous vos sites en HTTPS. Pour moi cela ressemble à ça.
Une fois tout ceci fait, redémarrez votre service haproxy et zou !
Automatisation
Pour automatiser un peu tout ça, j'ai choisi de faire ça comme suit:
- Un fichier domaine dans
letsencrypt/domains/domain.org
qui contient le scriptletsencrypt
. - Un fichier d'installation de certificats dans
letsencrypt/install-certs.sh
qui s'occupe d'installer les certificats déjà générés.
Et voila ! Le tout est dans un dépot github, si jamais ça peut vous servir, tant mieux !