Coucou. Un p’tit post pour parler d’un truc que j’ai dû faire l’autre jour, et que je pensais monstrueusement relou parce que c’était quand même le cas y’a pas si longtemps que ça : passer son site en HTTPS. Oui, c’est pas joliment dit mais on voit l’idée.

Bon, déjà, un bref rappel de comment ça marche le HTTPS. C’est un protocole sécurisé (le “S” pour “secure”) de chiffrage des communications qui repose sur un système de clé publique / clé privée. Ce qui est chiffré avec la clé publique ne peut être déchiffré qu’avec la clé privée, et vice versa. La clé privée, elle est au niveau du serveur web, tranquillou, alors que la clé publique est distribuée aux applicatifs qui ont besoin de déchiffrer ce qui a été chiffré avec la clé privée. Logique kôa. Quand un utilisateur arrive sur le site, le serveur renvoie en premier lieu son certif SSL, qui contient la clé publique. Si ce certificat est reconnu comme “digne de confiance” (“trusted”), bah on voit un petit cadenas vert apparaître et tout va bien. Sinon, un bon gros message d’erreur pour dire que “attentioooon, c’est du https mais moi je serais toi, je ferais demi-tour”. Pas trop ce qu’on veut, quoi.

Alors, comment qu’on était “trusted” ? Bah en passant par une autorité de certification, payante évidemment, et souvent fastidieuse (fallait donner pas mal de renseignements, c’était chiant). Mais maintenant, tout a changé, c’est trop cool. J’ai trouvé un p’tit soft appelé Certbot, qui permet d’éviter de se taper toute cette administration relou, et passer son site en HTTPS super simplement, et gratuitement. Je sais pas bien comment ça fonctionne à l’intérieur, mais je m’en fous un peu (j’ai peut-être tort, mais je suis flemmard, j’y peux rien).

Ça s’installe et ça se lance comme ça :

1
2
3
4
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx
sudo certbot --nginx # Oui je suis sur nginx

Ça va lister tous les sites installés sur votre serveur :

1
2
3
4
5
6
7
8
9
10
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: site1.bzh
2: site2.com
3: site3.net
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

Bon, là vous avez compris, faut lui dire pour quel site vous voulez créer un certificat. On va prendre site1.bzh parce qu’on aime le kig ha farz, et il va tout dérouler tout seul, la récupération du certif, l’installation sur votre serveur, tout ce joyeux bordel que vous deviez au préalable faire à la mano contre de la thune :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for site1.bzh
Waiting for verification...
Cleaning up challenges
Deployed Certificate to VirtualHost /etc/nginx/sites-enabled/site1 for set(['site1.bzh'])
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Si vous voulez pousser la flemme au maximum, répondez “2” à la toute dernière question que ce logiciel vous posera. C’est pour savoir s’il se charge aussi de changer votre configuration pour rediriger le trafic vers HTTPS et couper l’accès HTTP. Sinon, répondez “1” s’il faut qu’il touche à rien pour que vous fassiez cette tambouille tout seul. Allez, on répond “2” :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/site1
-------------------------------------------------------------------------------
Congratulations! You have successfully enabled
https://site1.bzh
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=site1.bzh
-------------------------------------------------------------------------------
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/site1.bzh/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/site1.bzh/privkey.pem
Your cert will expire on 2018-02-03. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

C’était facile, hein ? Merci aux gars qui ont fait ça, c’est vraiment cool. Ah, une dernière chose. Un certificat, ça expire. C’est marqué tout en bas, mais au cas où, je vous le redis, pour renouveler un certificat, c’est juste :

1
sudo certbot renew

La flemme, c’est la vie. Allez, la bise :)