mirror of
https://github.com/almet/notmyidea.git
synced 2025-04-28 19:42:37 +02:00
- 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.
127 lines
5.1 KiB
Markdown
127 lines
5.1 KiB
Markdown
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.
|
||
>
|
||
> \-- [Let's Encrypt](https://letsencrypt.org/)
|
||
|
||
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](https://fr.wikipedia.org/wiki/Attaque_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](http://www.haproxy.org/).
|
||
|
||
Je me suis basé pour cet article sur
|
||
d'[autres](https://blog.infomee.fr/p/letsencrypt-haproxy)
|
||
[articles](http://blog.victor-hery.com/article22/utiliser-let-s-encrypt-avec-haproxy),
|
||
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](https://github.com/letsencrypt/letsencrypt#installation).
|
||
|
||
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](https://github.com/almet/infra/blob/master/haproxy/haproxy.cfg#L63-L72)
|
||
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](https://github.com/almet/infra/blob/master/haproxy/haproxy.cfg#L38-L60).
|
||
|
||
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 script `letsencrypt`.
|
||
- 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](https://github.com/almet/infra/), si jamais ça peut vous servir,
|
||
tant mieux \!
|