URL: https://linuxfr.org/news/reparlons-de-let-s-encrypt Title: Reparlons de Letâs Encrypt Authors: gouttegd Davy Defaud, bubarđŠ„, ZeroHeure, BenoĂźt Sibaud, Xavier Teyssier et NĂżco Date: 2016ćčŽ02æ23æ„T12:31:06+01:00 License: CC By-SA Tags: letsencrypt, tls, x509, framasoft et firefox Score: 82 Letâs Encrypt est une autoritĂ© de certification fournissant gratuitement des certificats de type [X.509](https://fr.wikipedia.org/wiki/X.509) pour [TLS](https://fr.wikipedia.org/wiki/Transport_Layer_Security "Transport Layer Security"). Dans le dernier [journal](https://linuxfr.org/users/richarddern/journaux/pourquoi-je-suis-passe-a-let-s-encrypt) oĂč il Ă©tait question de [Letâs Encrypt](https://letsencrypt.org/), des commentateurs ont demandĂ© des retours dâexpĂ©rience : > On est sur _LinuxFr.org_, moi je tâaurais surtout demandĂ© « Comment ? ». Jâai lâintention de mây mettre aussi, mais je nâai pas encore franchi le pas et jâaimerais avoir des retours dâexpĂ©rience. En effet, y a largement matiĂšre Ă sâĂ©tendre sur lâutilisation de Letâs Encrypt. Cette dĂ©pĂȘche est donc un ensemble pas forcĂ©ment cohĂ©rent de rĂ©flexions sur des points divers et variĂ©s (sans aucune prĂ©tention Ă lâexhaustivitĂ©), agrĂ©mentĂ©es dâun peu de « retours dâexpĂ©rience » et de conseils (qui valent ce quâils valent). _Convention : « Letâs Encrypt » (en deux mots) dĂ©signera lâ[autoritĂ© de certification](https://letsencrypt.org/) dĂ©livrant des certificats par lâintermĂ©diaire du [protocole ACME](https://datatracker.ietf.org/wg/acme/documents/) («_ Automatic Certificate Management Environment _»), tandis que « Letsencrypt » (en un seul mot) dĂ©signera le [client ACME officiel](https://github.com/letsencrypt/letsencrypt)._ ---- [Journal Ă lâorigine de la dĂ©pĂȘche](http://linuxfr.org/users/gouttegd/journaux/reparlons-de-let-s-encrypt) ---- ## Principe de fonctionnement de Letsencrypt La facilitĂ© dâutilisation promise par Letâs Encrypt repose en rĂ©alitĂ© principalement sur le _client_ Letsencrypt et sur lâautomatisation quâil propose. Letsencrypt sâoccupe (ou _peut_ sâoccuper) de deux tĂąches distinctes : 1 _obtenir_ un certificat pour le(s) domaine(s) souhaitĂ©(s), et 2 _installer_ le certificat obtenu. Pour obtenir un certificat, Letsencrypt : * gĂ©nĂšre une paire de clefs et une demande de signature de certificat (_Certificate Signing Request_, CSR) ; * envoie la demande Ă un serveur ACME ; * rĂ©pond aux _dĂ©fis dâauthentification_ (_challenges_) posĂ©s par le serveur, permettant au demandeur de prouver quâil contrĂŽle le(s) domaine(s) demandĂ©(s) ; * reçoit le certificat signĂ© en retour. Une fois le certificat obtenu, le client installe le certificat proprement dit, la clef privĂ©e correspondante et les certificats intermĂ©diaires lĂ oĂč le serveur Web pourra les trouver, enfin il configure et relance ledit serveur sâil sait le faire (si le serveur en question est Apache HTTP ou nginx, pour lâinstant). Letsencrypt garde aussi une trace des certificats obtenus. LancĂ© Ă intervalle rĂ©gulier, il rĂ©pĂ©tera automatiquement la procĂ©dure sâil dĂ©tecte quâun certificat est sur le point dâexpirer. En dĂ©finitive, le but est clairement que lâadministrateur puisse mettre en place TLS en une seule commande, avant dâoublier jusquâĂ lâexistence mĂȘme de Letâs Encrypt. ## Le mode « staging » Si vous voulez tester Letsencrypt, que ce soit parce que vous nâĂȘtes pas encore sĂ»r de vouloir lâutiliser, parce que vous voulez vĂ©rifier sâil fonctionne dans votre configuration (une trĂšs bonne idĂ©e, parce quâune des limites de lâautomatisation est quâil suffit parfois de peu de choses pour la faire capoter), ou que vous voulez bidouiller le client, pensez Ă lâoption `--staging`. Avec cette option, le client passe par toutes les Ă©tapes mentionnĂ©es ciâdessus, mais le certificat obtenu est signĂ© par une pseudo-autoritĂ© de confiance (« _happy hacker fake CA_ ») rĂ©servĂ©e aux tests. Le principal intĂ©rĂȘt est de pouvoir vous livrer Ă autant de tests dont vous avez besoin, sans vous heurter aux [limitations fixĂ©es par Letâs Encrypt](https://community.letsencrypt.org/t/quick-start-guide/1631) (notamment, la limite de cinq certificats par semaine pour un domaine donnĂ©). Une fois que votre dĂ©cision est prise, que vous savez que le client fonctionne comme vous lâattendez, ou que vous ĂȘtes satisfait de votre bidouillage, retirez simplement lâoption `--staging` pour demander un certificat auprĂšs de la vĂ©ritable autoritĂ© Letâs Encrypt. ## Lâauthentification HTTP-01 Le protocole ACME propose plusieurs types de dĂ©fis pour vĂ©rifier la lĂ©gitimitĂ© du client sur un domaine. Le plus important pour lâinstant est le dĂ©fi `HTTP-01`. Si Alice demande un certificat pour `example.com`, le dĂ©fi HTTP-01 consistera pour elle Ă rendre accessible sur la machine `example.com`, par HTTP sur le port 80, un fichier `.well-known/acme-challenge/token`, oĂč _token_ est une valeur alĂ©atoire gĂ©nĂ©rĂ©e pour lâoccasion par le serveur ACME. Le fichier devra contenir le mĂȘme _token_, suivi dâun condensat de la clef associĂ©e au compte ACME dâAlice. Le client Letsencrypt se charge normalement tout seul de rĂ©pondre Ă ce dĂ©fi, soit en plaçant le fichier demandĂ© Ă la racine dâun serveur Web qui, par ailleurs, est dĂ©jĂ en service sur la machine, soit en se plaçant luiâmĂȘme en Ă©coute sur le port 80. Si vous avez dĂ©jĂ un serveur Web opĂ©rationnel, vous choisirez probablement la premiĂšre mĂ©thode (la seconde vous oblige Ă couper temporairement le serveur prĂ©âexistant). Dans ce cas, assurezâvous que la configuration actuelle du serveur _autorise lâaccĂšs Ă .well-known_. Plusieurs applications Web viennent avec un fichier `.htaccess` qui par dĂ©faut restreint lâaccĂšs Ă ce dossier, comme par exemple Drupal (cas [rapportĂ© ici](https://community.letsencrypt.org/t/drupals-defualt-htaccess-file-breaks-webroot-authentication/3014)) ou Owncloud (testĂ© par votre serviteur). Avec Owncloud 8.x, la ligne responsable dans le `.htaccess` est la suivante : ``` RewriteRule ^(\.|autotest|occ|issue|indie|db_|console).* [R=404,L] ``` Elle interdit lâaccĂšs, entre autres, Ă tout fichier ou dossier dont le nom commence par un point. InsĂ©rez avant cette ligne une rĂšgle autorisant spĂ©cifiquement lâaccĂšs au dossier des dĂ©fis ACME : ``` RewriteRule ^\.well-known/acme-challenge/ - [L] ``` Je mentionne ce cas pour illustrer ce que jâai appelĂ© plus haut les limites de lâautomatisation : Letsencrypt _tente_ de tout faire tout seul, mais ses dĂ©veloppeurs ne peuvent pas tout prĂ©voir et il y a aura toujours des cas oĂč lâadministrateur devra aller voir luiâmĂȘme ce qui se passe. ## Utiliser Letsencrypt ailleurs que sur le serveur de production Le client Letsencrypt est conçu pour ĂȘtre exĂ©cutĂ© directement sur le serveur sur lequel le certificat demandĂ© sera utilisĂ©. Cela au nom de la facilitĂ© dâutilisation et de lâautomatisation : câest ce qui permet au client Ă la fois de rĂ©pondre aux dĂ©fis dâauthentification, et de configurer le serveur pour utiliser le certificat obtenu. Le problĂšme que jâai avec ça, câest que cela implique donc dâexĂ©cuter, sur un serveur de production, un gros morceau de code qui : * est clairement estampillĂ© _BETA SOFTWARE_ ; * nĂ©cessite les privilĂšges du superâutilisateur ; * manipule directement des clefs cryptographiques ; * joue avec les paquets installĂ©s sur le systĂšme ; * tripatouille les fichiers de configuration des logiciels serveurs. _[What could possibly](https://community.letsencrypt.org/t/letsencrypt-messed-up-apache2-multidomain-config/11097) [go wrong](https://community.letsencrypt.org/t/all-services-are-down-after-running-letsencrypt/9852)?_> Au passage, le [_disclaimer_](https://github.com/letsencrypt/letsencrypt) sur lâĂ©tat du client (« _should be tested thoroughly in staging environments before use on production systems_ »), mĂȘme sâil est de bon sens, me semble assez dĂ©calĂ© par rapport Ă la cible de Letâs Encrypt. Combien dâadministrateurs en herbe ont un serveur de prĂ©âproduction ? Pour ma part, il est simplement hors de question que jâutilise ce client dans ces conditions. Question de principe. Pour les ~~rĂąleurs~~ utilisateurs dans mon genre, il y a plusieurs solutions. La premiĂšre est dâutiliser un autre client que le client officiel Letsencrypt. [Ce nâest pas le choix qui manque](https://community.letsencrypt.org/t/list-of-client-implementations/2103). Le nom de certains dâentre eux, ou leur façon dâinsister sur leur caractĂšre _simple_, _minimaliste_ (_SimpLE_, _ACME Tiny (~200 lines)_, _a relatively simple bash-script_, _simplest shell script_, _a tiny script (~400 lines)_, _lightweight manual-workflow_, _no magical webserver auto-configuration_, etc.) ou le fait quâils ne requiĂšrent pas de privilĂšges (_No Sudo Client_, _obviously runs without root access_), me fait dire que je ne suis pas seul Ă trouver le client officiel un peu _bloated_. La seconde est dâutiliser quand mĂȘme le client officiel (spontanĂ©ment, jâai quand mĂȘme un peu plus confiance dans ce client que dans un script de 200 lignes que je soupçonne dâavoir Ă©tĂ© pondu Ă la [R. A. C. H. E.](http://www.la-rache.com/) â je connais bien ce genre de scripts, pour en Ă©crire moiâmĂȘme rĂ©guliĂšrement...), mais avec la commande `certonly`, qui se contente dâobtenir un certificat sans chercher Ă lâinstaller, et lâoption `--manual`, qui laisse lâadministrateur rĂ©pondre aux dĂ©fis dâauthentification luiâmĂȘme. La combinaison des deux permet dâutiliser le client sur une machine distincte du serveur oĂč le certificat sera utilisĂ©. Rajoutez encore les options `--config-dir`, `--work-dir` et `--logs-dir` pour changer les dossiers de travail de Letsencrypt (qui par dĂ©faut veut absolument Ă©crire dans `/etc/letsencrypt`, `/var/lib/letsencrypt` et `/var/log/letsencrypt`), et le client nâa plus besoin de privilĂšges particuliers. Le problĂšme Ă©vident avec cette solution, câest son caractĂšre manuel. « RĂ©pondre soiâmĂȘme aux dĂ©fis dâauthentification » (câestâĂ âdire, aller dĂ©poser manuellement sur le serveur le bon fichier dans `.well-known/acme-challenge`, avec la valeur du jeton affichĂ© par le client) est fastidieux et _errorâprone_, surtout si vous demandez un certificat pour plus de deux ou trois domaines). Et la perspective de devoir recommencer tous les trois mois est peu engageante au possible. Reste la troisiĂšme solution, qui est celle que jâai choisie : adapter le comportement du client officiel pour avoir les avantages de lâauthentification manuelle (pas besoin de lancer le client sur le serveur) tout en permettant une certaine automatisation. Letsencrypt a le bon goĂ»t dâĂȘtre modulaire (les mĂ©thodes dâauthentification sont implĂ©mentĂ©es sous la forme de greffons), donc on peut faire ça « proprement » dans un greffon sĂ©parĂ© sans aller bidouiller honteusement le code du client comme un sagouin. Jâai donc commis (Ă la [R. A. C. H. E.](http://www.la-rache.com/), bien sĂ»r, faut pas dĂ©conner quand mĂȘme) [le greffon letsencrypt-ssh](https://git.framasoft.org/gouttegd/letsencrypt-ssh), qui permet de rĂ©pondre aux dĂ©fis dâauthentification en exĂ©cutant un script Ă travers une connexion SSH. En dĂ©finitive, jâinvoque Letsencrypt (sur mon poste de travail, _pas_ sur mon serveur) Ă peu prĂšs comme suit : ```sh $ letsencrypt \ certonly \ --config ~/.config/letsencrypt/letsencrypt.conf \ --csr cert.csr \ --cert-path cert.pem \ --chain-path chain.pem \ --fullchain-path cert+chain.pem \ --authenticator letsencrypt-ssh:ssh \ --letsencrypt-ssh:ssh-server root@myserver.example.com \ --domains example.com,www.example.com,nimportequoi.example.com ``` Avec le contenu suivant dans `~/.config/letsencrypt/letsencrypt.conf` : ``` config-dir = /home/alice/.config/letsencrypt work-dir = /home/alice/.local/share/letsencrypt logs-dir = /home/alice/.local/share/letsencrypt email = alice@example.com non-interactive agree-tos ``` `cert.csr` est la demande de signature de certificat (_Certificate Signing Request_), gĂ©nĂ©rĂ©e « classiquement » avec `openssl req` (voir plus bas pourquoi je fournis moi-mĂȘme la CSR au lieu de laisser Letsencrypt la gĂ©nĂ©rer lui-mĂȘme â en gros, câest pour pouvoir gĂ©rer les clefs privĂ©es Ă ma guise). Si la demande est accordĂ©e, le rĂ©sultat est le certificat proprement dit dans `0000_cert.pem`, le certificat intermĂ©diaire dans `0000_chain.pem`, et la concatĂ©nation des deux (directement utilisable avec la plupart des logiciels serveurs) dans `0000_cert+chain.pem` (le prĂ©fixe _nnnn_ est automatiquement ajoutĂ© par Letsencrypt ; il est incrĂ©mentĂ© si besoin est pour Ă©viter dâĂ©craser un fichier prĂ©âexistant). ## Letsencrypt et lâĂ©pinglage des clefs LâĂ©pinglage (_pinning_) des clefs dĂ©signe un ensemble de mĂ©thodes par lesquelles un site peut dĂ©signer Ă ses visiteurs les clefs publiques ou les certificats quâil utilise. Il y a principalement trois mĂ©thodes dâĂ©pinglage, qui diffĂšrent par lâendroit oĂč lâon plante lâĂ©pingle. * **Directement dans le code du navigateur.** Cette mĂ©thode est nĂ©e quand les dĂ©veloppeurs de Chrome ont Ă©pinglĂ© les clefs des sites de Google dans leur navigateur, puis sâest peu Ă peu Ă©tendue Ă la fois Ă dâautres navigateurs (Firefox [Ă partir de la version 32](https://wiki.mozilla.org/SecurityEngineering/Public_Key_Pinning#Implementation_status)) et Ă une poignĂ©e dâautres « sites sensibles » sĂ©lectionnĂ©s manuellement.> Je ne mâĂ©tendrai pas davantage sur cette mĂ©thode, qui par dĂ©finition est du seul ressort des Ă©diteurs de navigateurs. Si votre site est suffisamment « gros » ou « sensible » pour ĂȘtre Ă©ligible Ă ce type dâĂ©pinglage, vous nâavez pas besoin de ce journal pour savoir ce que vous avez Ă faire... * **Dans les enâtĂȘtes HTTP.** Câest le _HTTP Public Key Pinning_ (HPKP), normalisĂ© dans le [RFC 7469](http://tools.ietf.org/html/rfc7469). Câest la forme la plus rĂ©pandue dâĂ©pinglage aujourdâhui, pour deux raisons : câest la plus facile Ă dĂ©ployer pour lâadministrateur du site Web et elle est pleinement prise en charge par Chrome et Firefox. Elle a pour inconvĂ©nient de ne pas pouvoir protĂ©ger lâutilisateur lors de sa _premiĂšre visite_ sur le site. * **Dans le DNS.** Câest le _DNS-based Authentication of Named Entities_ (DANE), normalisĂ© dans le [RFC 6698](http://tools.ietf.org/html/rfc6698). Cette mĂ©thode a le double avantage, par rapport Ă la prĂ©cĂ©dente, de nâĂȘtre pas limitĂ©e au protocole HTTP et dâĂȘtre efficace dĂšs la premiĂšre connexion. Elle a le double inconvĂ©nient dâĂȘtre plus dĂ©licate Ă dĂ©ployer cĂŽtĂ© serveur â parce quâil faut dĂ©ployer DNSSEC au prĂ©alable (si DNSSEC est _dĂ©jĂ _ en place, rajouter DANE par dessus est trivial) â et pas du tout prise en charge nativement cĂŽtĂ© client (en tout cas par les navigateurs, donc pour HTTP â la situation est plus engageante dans le monde du courrier Ă©lectronique, avec notamment une [pleine prise en charge par Postfix](http://www.postfix.org/TLS_README.html)).> DANE permet aussi dâĂ©pingler les _certificats_ plutĂŽt que les _clefs publiques_. Je ne mâattarderai pas ici sur cette possibilitĂ©. Quelle que soit la mĂ©thode (notez quâelles sont combinables, vous pouvez Ă©pingler dans les enâtĂȘtes HTTP _et_ dans le DNS), lâĂ©pinglage nĂ©cessite au prĂ©alable de rĂ©flĂ©chir Ă trois questions : * quelle(s) clef(s) Ă©pingler ? * pour combien de temps ? * comment gĂšreâtâon le changement de clef ? ### Quelle(s) clef(s) Ă©pingler ? Vous pouvez Ă©pingler la clef de nâimporte lequel des certificats constituant votre chaĂźne de certification, depuis le propre certificat du serveur jusquâau certificat racine de lâautoritĂ© de certification. Dans le cas de Letâs Encrypt, la chaĂźne de certification est Ă trois maillons : * votre certificat ; * le certificat intermĂ©diaire `Letâs Encrypt Authority X1` ; * le certificat racine `DST Root CA X3`. Ăpingler la clef du certificat racine est Ă mon avis toujours une mauvaise idĂ©e (que ce soit avec Letâs Encrypt ou nâimporte quelle autre autoritĂ© de certification) : dâune part vous donnez trop de pouvoir Ă lâAC, dâautre part et surtout, ce nâest pas vous qui dĂ©cidez Ă _quelle racine_ votre chaĂźne de certification va ĂȘtre rattachĂ©e. Par le jeu des signatures croisĂ©es entre autoritĂ©s de certification, une mĂȘme chaĂźne peut ĂȘtre rattachĂ©e Ă plusieurs racines, et câest le navigateur qui dĂ©cide seul comment reconstruire la chaĂźne globale. Ăpingler la clef du certificat intermĂ©diaire nâest pas une mauvaise solution, Ă condition dâĂȘtre conscient de deux Ă©cueils. Dâune part, il est toujours possible que ce certificat intermĂ©diaire change Ă lâavenir, ce qui casserait votre Ă©pingle (un tel changement serait probablement annoncĂ© Ă lâavance par Letâs Encrypt, mais encore fautâil se tenir au courant â et il y a aussi le risque dâun changement _Ă lâimproviste_, en cas de compromission). Dâautre part, cela pose un problĂšme Ă©pineux lors du choix de la _clef de secours_ (voir plus loin). Reste lâĂ©pinglage de la clef de votre certificat, qui est (vous mâavez vu venir) Ă mon sens la meilleure solution. Câest Ă la fois plus sĂ»r (vous vous protĂ©gez contre dâĂ©ventuelles malversations de toutes les AC, _y compris Letâs Encrypt_, alors que lâĂ©pinglage dâune clef parente vous protĂšge « seulement » contre les AC _autres que Letâs Encrypt_), et ça vous donne plus de flexibilitĂ© quand il sâagit de remplacer la clef â puisque _vous_ dĂ©cidez Ă quel moment vous changez de clef, et donc Ă quel moment vous devez mettre Ă jour votre Ă©pingle. Malheureusement, cette derniĂšre solution est celle qui ne fonctionne pas _outâofâtheâbox_ avec Letsencrypt. Par dĂ©faut, en effet, le client gĂ©nĂšre automatiquement une nouvelle clef Ă chaque renouvellement du certificat, ne vous laissant pas la mainmise nĂ©cessaire Ă la bonne gestion des Ă©pingles. Pas dâobstacle insurmontable, mais il faut renoncer Ă ce comportement par dĂ©faut et prendre en charge vousâmĂȘme la gestion des clefs de vos certificats et fournir Ă Letsencrypt, via lâoption `--csr`, une CSR prĂ©âgĂ©nĂ©rĂ©e par vos soins â cela dĂ©sactive de fait la gĂ©nĂ©ration automatique dâune nouvelle clef. ### La durĂ©e de lâĂ©pinglage Le choix de la durĂ©e de lâĂ©pinglage (paramĂštre `max-age` dans un enâtĂȘte `Public-Key-Pins`) est dictĂ©e par deux considĂ©rations : * une durĂ©e trop courte risque de faire perdre le bĂ©nĂ©fice de lâĂ©pinglage aux visiteurs occasionnels (par exemple, un Ă©pinglage de trois jours ne servirait Ă rien pour quelquâun qui visite votre site en moyenne une fois par semaine) ; * une durĂ©e trop longue augmente la pĂ©riode dâindisponibilitĂ© de votre site si jamais les clefs Ă©pinglĂ©es venaient Ă ne plus correspondre aux clefs rĂ©ellement utilisĂ©es pour quelque raison que ce soit (typiquement, une erreur de votre part...). La [RFC 7469, annexe B](http://tools.ietf.org/html/rfc7469#appendix-B) suggĂšre de commencer par une durĂ©e de lâordre de quelques minutes Ă quelques heures, puis dâaugmenter progressivement cette durĂ©e. En gardant Ă lâesprit que les navigateurs peuvent imposer une borne supĂ©rieure, laissĂ©e Ă leur discrĂ©tion (mais la RFC suggĂšre environ 60 jours, §4.1). Pour ma part, jâai optĂ© pour un alignement avec la durĂ©e de validitĂ© des certificats dĂ©livrĂ©s par Letâs Encrypt, soit 90 jours. Mais ce nâest aucunement nĂ©cessaire. Souvenezâvous quâon Ă©pingle ici des _clefs_ (qui sont valables aussi longtemps que _vous_ le dĂ©cidez) et non des certificats. Dans le cas de lâĂ©pinglage dans le DNS, il nây a pas dâĂ©quivalent explicite au paramĂštre `max-age`, mais la pĂ©riode de validitĂ© de la signature de lâenregistrement TLSA en tient lieu. ### Ăpinglage et changement de clefs Quelle que soit la clef Ă©pinglĂ©e, anticiper son changement est crucial. Si une clef Ă©pinglĂ©e change subitement sans que lâĂ©pingle nâait Ă©tĂ© mise Ă jour _Ă lâavance_, les visiteurs ne pourront plus se connecter au site tant que lâancienne Ă©pingle nâaura pas expirĂ©e. Comme il nâest pour autant pas possible de changer une Ă©pingle tant que la clef correspondante est toujours utilisĂ©e, la seule solution viable est dâĂ©pingler en permanence au moins _deux_ clefs : une clef en cours dâutilisation, et la clef qui la remplacera dans le futur. Ce double Ă©pinglage est dâailleurs formellement _obligatoire_ dans le cas de lâĂ©pinglage dans les enâtĂȘtes HTTP : la [RFC 7469](http://tools.ietf.org/html/rfc7469#section-4.3) _interdit_ aux navigateurs de tenir compte dâun enâtĂȘte `Public-Key-Pins` qui ne comporterait pas (au moins) une « Ă©pingle de secours » (_backup pin_), câestâĂ âdire lâĂ©pingle dâune clef _absente_ de la chaĂźne de certification actuelle (§4.3). Si vous avez choisi dâĂ©pingler la clef dâun certificat intermĂ©diaire ou du certificat racine, vous devez maintenant vous demander : quelle clef de secours allezâvous Ă©pingler ? La recommandation dans ce cas de figure est dâĂ©pingler une clef Ă©quivalente _dâune autre autoritĂ© de certification_ â lâautoritĂ© vers laquelle vous avez prĂ©vu de vous retourner en cas de problĂšme avec Letâs Encrypt. Si au contraire vous avez choisi dâĂ©pingler la clef de votre propre certificat, il vous suffit de gĂ©nĂ©rer initialement non pas une mais deux clefs : une que vous utiliserez pour gĂ©nĂ©rer la CSR et obtenir un certificat de Letâs Encrypt (et qui se retrouvera donc sur votre serveur) et une dont vous prendrez juste lâempreinte avant de la mettre bien Ă lâabri (ailleurs que sur votre serveur). Comme dĂ©jĂ vu plus haut, cela implique de renoncer Ă la gĂ©nĂ©ration automatique des clefs qui est le comportement par dĂ©faut de Letsencrypt. Lorsque vous dĂ©ciderez quâil est temps de changer de clef, il vous faudra alors : * gĂ©nĂ©rer une nouvelle CSR Ă partir de la clef de secours (qui devient la clef « active ») ; * renouveller le certificat en utilisant la CSR fraĂźchement gĂ©nĂ©rĂ©e ; * gĂ©nĂ©rer une nouvelle clef de secours ; * mettre Ă jour les Ă©pingles pour y ajouter la nouvelle clef de secours (et supprimer lâancienne clef). Notez que dĂšs lâinstant oĂč vous gĂ©rez les clefs vousâmĂȘmes au lieu de laisser Letsencrypt le faire, rien ne vous oblige Ă procĂ©der Ă ce changement _Ă chaque renouvellement_ du certificat. Vous seul dĂ©cidez de la frĂ©quence de rotation des clefs (hors le cas oĂč une compromission de votre clef actuelle vous oblige Ă activer prĂ©maturĂ©ment la clef de secours) : ce peut ĂȘtre Ă chaque renouvellement (donc tous les trois mois environs), mais aussi un renouvellement sur deux, un renouvellement sur cinq... ## Letâs Encrypt et OCSP Une des principales craintes de lâĂ©quipe de Letâs Encrypt sur la viabilitĂ© du projet concerne la charge des serveurs [OCSP](http://tools.ietf.org/html/rfc6960). DĂ©livrer un certificat est un acte unique qui ne coĂ»te pas grandâchose, mais pour chaque certificat dĂ©livrĂ©, Letâs Encrypt doit ĂȘtre prĂȘt Ă rĂ©pondre Ă quiconque demande si le certificat est toujours valide ou bien sâil a Ă©tĂ© rĂ©voquĂ©, et ce pour la durĂ©e de vie du certificat. Câest lâune des raisons derriĂšre, Ă la fois, la dĂ©cision de limiter la validitĂ© des certificats Ă 90 jours (passĂ©s ces 90 jours, un client nâa plus besoin de solliciter le serveur OCSP, la date dâexpiration suffit Ă dire que le certificat nâest plus valable), et la dĂ©cision de limiter le nombre de demandes de certificats Ă cinq par domaine et par semaine. Vous pouvez contribuer Ă allĂ©ger la charge pesant sur Letâs Encrypt en configurant votre serveur pour fournir luiâmĂȘme les rĂ©ponses OCSP Ă vos clients. Câest _lâĂ©pinglage OCSP_ ([OCSP stapling, RFC 6066 §8](http://tools.ietf.org/html/rfc6066#section-8)). Le principe est que câest votre serveur, et non vos clients, qui ira pĂ©riodiquement sâenquĂ©rir auprĂšs du serveur OCSP de Letâs Encrypt (dont lâadresse est mentionnĂ©e dans le certificat) de lâĂ©tat du certificat. Ă la connexion dâun client, si celuiâci prend en charge les Ă©pingles OCSP (câest le cas Ă ma connaissance de tous les navigateurs courants), le serveur lui enverra la rĂ©ponse OCSP en mĂȘme temps que le certificat, dispensant ainsi le client dâaller contacter luiâmĂȘme le serveur OCSP de lâautoritĂ© de certification (rĂ©duisant par lĂ non seulement la charge dudit serveur, mais aussi une fuite dâinformations sur les sites visitĂ©s par le client). Ă lâheure actuelle, mĂȘme si vous laissez Letsencrypt configurer automatiquement votre serveur, il nâactive pas lâĂ©pinglage OCSP. Vous devez donc le faire vousâmĂȘme si votre serveur le prend en charge. Avec Apache 2.4 : ``` SSLUseStapling on SSLStaplingCache shmcb:/var/lib/httpd/ssl_stapling(512000) ``` Reportezâvous Ă [la documentation du module SSL](http://httpd.apache.org/docs/2.4/mod/mod_ssl.html) pour le dĂ©tail des options `SSLStapling*`. ## Letâs Encrypt et Certificate Transparency Letâs Encrypt soumet automatiquement les certificats gĂ©nĂ©rĂ©s Ă plusieurs opĂ©rateurs de journaux [_Certificate Transparency_](https://certificate-transparency.org/) ([RFC 6962](http://tools.ietf.org/html/rfc6962)). Toutefois, les jetons CT correspondants ne sont _pas_ inclus dans le certificat dĂ©livrĂ©, et ne sont apparemment pas inclus non plus dans les rĂ©ponses OCSP. Cela veut dire que si vous voulez fournir les jetons CT Ă vos visiteurs, il ne vous reste que la mĂ©thode de [lâextension TLS](http://tools.ietf.org/html/rfc6962#section-3.3.1), ce qui peut poser deux problĂšmes : * votre serveur Web doit prendre en charge lâextension en question, ce qui est le cas de peu de serveurs aujourdâhui, du moins dans leurs versions stables (pour Apache HTTP, il faut la version de dĂ©veloppement et le module [_ssl-ct_](http://httpd.apache.org/docs/trunk/mod/mod_ssl_ct.html)) ; * il vous faut rĂ©cupĂ©rer les jetons auprĂšs des opĂ©rateurs de journaux, et il ne semble pas y avoir de moyen direct de faire ça â le plus simple est _a priori_ de carrĂ©ment reâsoumettre vousâmĂȘme le certificat (avec [_ct-submit_](https://github.com/grahamedgecombe/ct-submit), par exemple), en espĂ©rant que lâopĂ©rateur du journal accepte de vous redonner le jeton correspondant (la [RFC 6962](http://tools.ietf.org/html/rfc6962#section-3) autorise ce comportement mais ne lâimpose pas, lâopĂ©rateur pourrait simplement rejeter votre soumission au motif que le certificat a _dĂ©jĂ _ Ă©tĂ© ajoutĂ© au journal). Gardez toutefois Ă lâesprit quâaucun navigateur nâexige de jetons CT pour valider un certificat. Seul Chrome exige de tels jetons, seulement pour les certificats « Ă validation Ă©tendue » (_Extended Validation_, EV), et seulement pour afficher la « barre verte » associĂ©e Ă ce type de certificats (sans jetons CT, le certificat est toujours acceptĂ©, mais pas comme un certificat EV). Les certificats dĂ©livrĂ©s par Letâs Encrypt Ă©tant _Domain-Validated_, les jetons CT nâapportent rien de plus.> Au passage, je ne suis pas sĂ»r que les opĂ©rateurs de journaux CT voient dâun trĂšs bon Ćil le fait que Letâs Encrypt leur soumettent ses certificats. Les serveurs de journaux ont Ă©tĂ© dimensionnĂ©s pour enregistrer des certificats EV dont le nombre est relativement faible ([moins de 5 % de tous les certificats](http://www.netcraft.com/internet-data-mining/ssl-survey/)), pas des certificats DV gĂ©nĂ©rĂ©s par millions et qui plus est renouvelĂ©s tous les trois mois... --- Letâs Encrypt, initiĂ© par lâEFF, Mozilla & LâUniversitĂ© du Michigan, sous le chapeau de lâ« _Internet Security Research Group_ » est un projet aujourdâhui rejoint et soutenu par de plus en plus de particuliers (Alex Povli, par exemple), de groupes (IdenTrust et la Fondation Linux, par exemple) et de sociĂ©tĂ©s (Cisco, Free, OVH, par exemple) permet Ă tout Ă chacun Ă Ă©galitĂ© de mettre en Ćuvre du chiffrement certifiĂ© des communications, tout en facilitant grandement la maintenance et la gestion. Letâs Encrypt met aussi un coup de pied dans la juteuse fourmiliĂšre des autoritĂ©s de certifications, en proposant ce niveau de service et cette simplicitĂ© d'usage, gratuitement. Allons nous *tous* passer par letâs encrypt ? Et, Ă la fin, il ne peut en rester quâun ?