Introduction

Je viens de basculer la gestion des certificats TLS de ce site web chez CACert.org. Pour ceux qui ne l'avaient pas encore remarqué, ce site web dispose d'un accès en https. Jusqu'à présent, j'utilisais un certificat auto-signé. Cette méthode permet de chiffrer le trafic à la condition expresse que vous fassiez confiance au certificat émis. C'est mieux que rien mais puisque tout le monde peut utiliser l'autorité de certification Cacert.org, autant le faire. Pour ma part, cela faisait quelques années que j'avais le projet d'utiliser cette autorité de certification un peu particulière et dont le concept me plaît beaucoup. Dans tous les cas, j'y suis passé et vous pouvez vérifier mon certificat en allant sur la partie en canal chiffré pour vous en rendre compte.

Cet article a juste pour objet de faire un peu de pub pour CACert.org et vous permettre de vous donner mon opinion sur cette association.

CACert.org, c'est quoi ?

Il s'agit d'une autorité de certification (une AC). Pour faire simple, il s'agit d'une entité chargée de signer des certificats. Lorsqu'un client veut chiffrer un canal de communication avec TLS, il demande le certificat du serveur (c'est la clef publique). Ce certificat indique quelle est l'autorité qui l'a signé ainsi que la signature. Le client vérifie cette signature car il dispose de la clef publique de l'autorité de certification (généralement dans les éléments de configuration du navigateur web ou dans /etc/ssl/certs pour les autres programmes).

Au delà d'être une AC, CACert a une dimension communautaire qui la distingue bien des autres. Si on compare avec ce qui se fait ailleurs, notamment les AC commerciales, tout est différent. D'abord, CACert est une association. Ensuite, CACert ne fait pas payer ses certificats. De plus, CACert tente d'imposer un autre modèle de sécurité qui se rapproche de celui de GPG: la confiance repose sur un réseau de personnes qui se font mutuellement confiance en organisant des keysigning parties. Enfin, l'infrastructure de CACert repose en grande majorité sur du logiciel libre.

Des alternatives à CACert.org ?

Obtenir un certificat TLS est bien souvent synonyme de passage à la caisse. En règle générale, les tarifs ne sont pas donnés: il faut compter environ 15€ par an pour un certificat pour une seule adresse de serveur. Parfois, votre registrar DNS peut vous fournir gratuitement la première année un certificat. C'est le cas de Gandi par exemple.

Il existe également la société Startcom via leur site startSSL. Ils proposent des certificats TLS x509 de niveau 1 gratuitement. Mais ces certificats ne sont valides que pour les sites non commerciaux. C'est mon cas mais je n'ai pas donné suite car je préfère de loin le fonctionnement collaboratif de CACert.org. Au delà du fait que le certificat soit gratuit, c'est toute la philosophie communautaire que je retrouve avec CACert.org. C'est pourquoi il faut plutôt l'encourager.

Comment récupérer un certificat auprès de CACert.org ?

Pour récupérer un certificat auprès d'une AC, il faut plusieurs choses sous la main:

  • une clef privée. C'est indispensable car c'est avec cette clef que vous allez générer votre certificat.
  • un outil pour gérer ces certificats. Dans mon cas, j'ai utilisé gnutls (aptitude install gnutls-bin).
      -- Générer une clef privée:
      $ certtool --generate-privkey --outfile /etc/ssl/private/ma_clef_privee.pem
      -- Sécuriser la clef
      $ chmod 600 /etc/ssl/private/ma_clef_privee.pem
      -- Générer un fichier de demande de certificat:
      $ certtool --generate-request --load-privkey /etc/ssl/private/ma_clef_privee.pem --outfile ~/mon_certificat_cacert.csr
      -- Répondre aux questions demandées
      -- Lorsque certtool vous demande un nom de domaine, indiquez le FQDN approprié.
      -- Vous pouvez enregistrer plusieurs FQDN pour identifier plusieurs sources.
  • Se rendre sur CACert.org.
  • Se connecter avec son compte.
  • Vous devez enregistrer le nom de domaine avant de pouvoir demander un certificat dessus. Cet enregistrement implique que l'adresse mail d'administration (root@example.com ou admin@example.com par exemple) soit active.
  • Après avoir enregistré le nom de domaine, vous pouvez accéder à la page de demande de certificat où vous aurez juste à coller le contenu de votre CSR.
  • Votre certificat devrait arriver par courrier électronique ainsi qu'à l'écran.

Vous avez maintenant un beau certificat tout neuf d'une durée de vie assez courte: 6 mois. En effet, par défaut, lorsque personne ne vous a accrédité, vous avez des certificats avec une durée de vie plus courte. C'est juste pour vous motiver à rencontrer des gens dans la vraie vie pour améliorer votre score d'accréditation. Je trouve que c'est une bonne technique et je compte bien m'occuper d'augmenter la durée de vie de mon certificat...

Intégrer le certificat racine de CACert.org

Néanmoins tout n'est pas rose avec CACert. En effet, depuis les débuts de la mise en place de cette AC particulière, il y a eu des projets d'intégrer son certificat racine dans les distributions GNU/Linux courantes ainsi que pour les logiciels de la fondation Mozilla. Mais cette intégration a connu quelques reculs significatifs avec notamment le retrait de la distribution Debian. Je vous recommande la lecture de cet article LWN qui explique le pourquoi du comment.

Mais même si ce retrait pourrait m'inciter à m'éloigner de CACert, je maintiens la volonté de travailler avec une entité associative et participative plutôt que d'engraisser une boîte privé pour obtenir un petit fichier texte (le certificat public). D'ailleurs, on reproche à CACert de ne pas avoir réalisé d'audit sécurité et d'avoir des outils (dont le code est libre) un peu buggés mais j'attends de voir ce que les AC commerciales peuvent proposer à ce niveau. D'ailleurs, je peux vous faire également remarquer que même des AC gouvernementales ne parviennent pas à être intégrées dans les produits de la fondation Mozilla. C'est le cas pour l'IGC gouvernementale française gérée par l'ANSSI. Ils avaient réussi à intégrer la version 2002 de leur AC dans Firefox et dans les distributions GNU/Linux majeures. Mais ce n'est plus le cas avec le nouveau certificat d'AC en RSA-4096, ce qui conduit certains sites web gouvernementaux à utiliser des AC commerciales pour présenter certains sites web sécurisés à disposition de l'ensemble des citoyens.

Revenons à CACert. Si vous êtes sous Debian Wheezy, vous n'aurez pas de problème car le certificat racine de cacert est déjà présent dans la distribution. Si vous utilisez des distributions plus récentes de Debian (testing ou sid), il va vous falloir injecter le certificat racine de CACert dans votre distribution. Rendez-vous sur cette page pour récupérer les certificats. Je vous conseille de prendre celui de niveau 3 au format PEM, il sera plus facile à intégrer et offrira plus de sécurité (à la condition d'utiliser une distribution récente, pas un vieux clou comme RHEL4).

Ensuite, il reste à copier ce fichier dans /etc/ssl/certs/ en lui affectant les bons droits:

# wget http://www.cacert.org/certs/class3.crt -o /etc/ssl/certs/cacert.org_class3.pem
# wget http://www.cacert.org/certs/root.txt -o /etc/ssl/certs/cacert.org_class1.pem
# chmod 644 /etc/ssl/certs/cacert.org_*.pem
-- Intégrer ces certificats dans le bundle ca-certificates.crt
# cat /etc/ssl/certs/cacert.org_*.pem >> /etc/ssl/certs/ca-certificates.crt

Avec ces commandes, vous faîtes confiance à l'AC de CACert.org.

Deuxième effet kisscool

En outre, cette migration me permet de mettre fin au problème récurrent que je rencontre avec mes dépôts Git. J'accède à ces dépôts d'un peu n'importe où, essentiellement via HTTPS et cela posait jusqu'à présent certains problèmes. En effet, GNUTls (qui est la bibliothèque TLS utilisée pour compiler Git) est plutôt sensible avec les certificats auto-signés. Depuis la migration vers un certificat signé par CACert, plus de problème d'accès HTTPS à mes dépôts Git. Il faut juste prévoir d'intégrer le certificat racine de CACert dans le dépôt des certificats publics de la distribution du client Git comme je l'ai présenté au dessus.

Cette méthode se révèle beaucoup plus efficace que celle que j'avais présentée car la recompilation du paquet Git sous Debian prend un temps infini sur une machine modeste et il faut faire cette compilation à chaque mise à jour du paquet Git.

Conclusion

Voilà c'est fait ! J'ai enfin un certificat TLS signé par une AC officielle. C'est une AC un peu particulière mais ça ne me choque pas plus que ça. Je souhaite simplement que CACert arrive un jour à se faire enregistrer par défaut par les distributions GNU/Linux les plus courantes ainsi que par la fondation Mozilla. Dans tous les cas, je compte bien faire vivre le modèle de sécurité de CACert en augmentant mon score d'accréditation et en faisant un peu de communication sur cette AC. C'est tout l'objet de cet article et j'espère que vous aussi, lorsque vous aurez besoin de chiffrer vos canaux de communication, vous penserez à CACert plutôt qu'à Verisign ou StartSSL.