XinCTO/passage en https avec certbot et let's encrypt

Ecrit le Sat, 30 September 2017 10:29:05 +0000

passage en https avec certbot et let's encrypt

L’utilisation du chiffrement pour l’exposition des contenus sur Internet étant poussé par certains grands du secteur1 2, sans parler des navigateurs3, il devient indispensable de le mettre en place, ce site n’y déroge pas. Afin de simplifier les choses et limiter les coûts, voici comment mettre en place simplement un certificat let’s encrypt avec certbot pour son serveur web.

Mise en place

L’outil certbot permet de manipuler les certificats numériques en provenance de Let’s Encrypt, l’autorité de certification lancée par EFF, Mozilla et certains autres acteurs pour un internet plus respectueux des droits et de la liberté.

L’installation est très simple, elle doit être effectuée sur votre serveur web Linux sur lequel vous devez disposer des droits root. Il existe des moyens un peu plus complexes de mettre en place des certificats sans avoir un accès direct au serveur, mais faisons simple pour démarrer. Consultez les procédures d’installation de certbot.

La solution proposée ici utilise le module asynchrone (webroot), la méthode permet de dissocier la gestion des certificats et l’installation sur le serveur web. Il existe des plugins directement adaptés aux serveurs comme apache ou nginx, je vous laisse explorer.

Le principe est de demander la création d’un certificat par let’s encrypt sur un domaine spécifique en lui spécifiant le répertoire racine hébergeant ce domaine. Pendant le phase de création ou de renouvellement, un fichier sera déposé sur le serveur afin que let’s encrypt puisse en valider la propriété, ceci valide que la chaine DNS et hébergement est sous contrôle, certbot s’occupant de l’ensemble du pilotage de l’opération.

Par exemple pour ce site, il suffit de spécifier le domaine et l’emplacement du stockage des fichiers :

1certbot certonly --webroot -w /www/xincto/ -d xincto.me

Les certificats et clés sont alors déposés dans le répertoire /etc/letsencrypt/live/xincto.me/ sous la forme de :

  • privkey.pem : la clé privée associée au certificat
  • fullchain.pem : la chaine de certification complète avec le certificat intermédiaire
  • chain.pem : pour Nginx >=1.3.7.

Le certificat ainsi crée peut être vérifié, pas de raison qu’il y ait de soucis. La validité est posée pour 90 jours, le sujet pointe sur votre domaine et l’émetteur est bien let’s encrypt :

 1# openssl x509 -noout -text -in /etc/letsencrypt/live/xincto.me/fullchain.pem
 2
 3Certificate:
 4    Data:
 5        Version: 3 (0x2)
 6        Serial Number:
 7            03:9e:cb:8a:aa:a1:34:9d:f6:cb:ea:f4:92:ff:fe:e9:1c:be
 8    Signature Algorithm: sha256WithRSAEncryption
 9        Issuer: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3
10        Validity
11            Not Before: Sep 16 11:16:00 2017 GMT
12            Not After : Dec 15 11:16:00 2017 GMT
13        Subject: CN=xincto.me
14        Subject Public Key Info:
15            Public Key Algorithm: rsaEncryption
16                Public-Key: (2048 bit)

Il faudra alors copier ces fichiers en rapport avec votre configuration apache (ou autre) en utilisant respectivement fullchain.pem pour le certificat et privkey.pem pour la clé privée :

1 SSLCertificateFile "/www/ssl/xincto.cert"
2 SSLCertificateKeyFile "/www/ssl/xincto.key"

Vous pouvez gérer sur le même serveur web plusieurs sites avec chacun leur certificat, la liste des certificats gérés peut être consultée via la commande certbot certificates. Vous pourrez voir l’ensemble de vos certificats, les dates d’expiration, le lien vers la chaine et la clé et ce pour chaque domaine protégé.

Renouvellement

Puisque le certificat let’s encrypt vous est fourni pour 3 mois, il sera alors nécessaire de le renouveller avant l’échéance. certbot vous propose une méthode pour ce faire :

1certbot renew --cert-name xincto.me

Je vous conseille de mettre cela dans un petit script qui en fonction de la date de validité effectuera le renouvellement du certificat, la copie des nouveaux fichiers et le redémarrage de votre serveur web, c’est toujours dommage d’oublier de renouveller un certificat ;)

La commande suivante vous permettra de tester la validité à 14 jours de l’échéance :

1openssl x509 -checkend 1209600 -noout -in /etc/letsencrypt/live/xincto.me/fullchain.pem

A l’usage

Cette solution à base de certbot et de let’s encrypt est vraiment intéressante pour les sites perso, les associations, mais aussi pourquoi pas pour les environnements bas de votre chaine d’intégration et de test continu. Les limitations proposées par let’s encrypt sont assez larges et généreuses. A noter qu’à partir de janvier 2018 les certificats wildcard seront proposés.


Photo James Sutton