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 ?

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /