Signez vos certificats avec la CaCert

À l’occasion du renouvellement de la signature du certificat qu’utilise mon blog, je vous propose de parler des certificats SSL.

Avant de nous lancer…

Tout d’abord, je vais commencer par la question que vous devez être en train de vous poser: qu’est-ce qu’un certificat SSL? Et bien, pour faire simple, c’est un fichier, généré par le propriétaire d’un serveur et signé par une autorité de certification (également appelée CA pour certification authority), qui va permettre au navigateur de savoir si il a affaire au vrai serveur ou si il fait face à un quelqu’un qui essaye de se faire passer pour le serveur demandé. C’est en quelque sorte une carte d’identité que montre le serveur au navigateur pour que ce dernier puisse savoir si il doit ou non lui faire confiance et autoriser un dialogue chiffré (vous savez, le fameux https).

Maintenant que avons vu (et que, je l’espère, vous avez compris) ce qu’était un certificat SSL, nous allons nous intéresser aux différents moyens de signer ou faire signer ses certificats. Pour cela, nous disposons de trois solutions:

  1. Signer soi-même son certificat: le gros avantage de cette solution, c’est que produire un certificat auto-signé est très facile à faire. Le gros désavantage, c’est que tous les navigateurs demanderont à leurs utilisateurs si ils souhaitent faire ce qu’ils appellent une « exception de sécurité » et faire confiance à votre serveur. C’est, à mes yeux, une très mauvaise solution…
  2. Faire signer son certificat par une autorité de certification payante: le gros avantage de cette solution, c’est que le certificat de votre serveur sera reconnu par tous les navigateurs. Le gros désavantage, c’est que ces autorités de certification vous demandent, pour un seul domaine (donc soit example.com, soit www.example.com), une centaine d’euros par an (dans leur formule la moins chère). C’est une très bonne solution pour un gros site ou un site de e-commerce, mais ce n’est pas génial pour un petit site/blog aux ressources limitées…
  3. Faire signer son certificat par une autorité de certification gratuite: le gros avantage de cette solution, c’est que c’est gratuit. Le gros désavantage, c’est que tous les navigateurs/systèmes d’exploitation ne reconnaissent (malheureusement) pas encore ces autorités. Ici, c’est avant tout l’utilisateur qui est avantagé: il n’aura qu’à importer un seul certificat racine (celui de l’autorité de certification) pour ne plus recevoir d’avertissement de la part de plusieurs centaines de milliers de sites!

Vous l’aurez sans doute deviné, nous allons ici nous intéresser à la troisième solution. Nous allons nous pencher sur une autorité de certification bien particulière: la CaCert. Cette autorité permet, après inscription et vérification des noms de domaine (par l’envoi d’un e-mail à un contact présent dans le WhoIs), de faire signer ses certificats pour une durée de six mois. Si vous trouvez ce délai un peu court, sachez qu’il existe un système de points qui vous permettra d’acquérir plus de privilèges pour la signature de vos certificats.

Génération d’un certificat

Commencez par vous connecter (via SSH par exemple) au shell de votre serveur. Une fois connecté, créez un dossier où vous stockerez tout ce qui concerne votre futur certificat:

mkdir certificat/
cd certificat/

Ensuite, nous allons télécharger puis lancer un script bash qui nous permettra de générer un certificat qui pourra, par la suite, être signé sur le site de la CaCert:

wget https://guillaume.romagny.free.fr/evaldo/csr.sh
chmod u+x csr.sh
./csr.sh

Voici un exemple qui vous aidera à remplir les informations demandées. Ici, je génère un certificat pour les domaines mon-domaine.fr et tous ses sous-domaines (pour cela, on utilise une wild card, que l’on note « * »), mon-autre-domaine.fr (mais pas www.mon-autre-domaine.fr) et sous-domaine.troisieme-domaine.fr (mais ni troisieme-domaine.fr, ni www.troisieme-domaine.fr):

Private Key and Certificate Signing Request Generator
This script was designed to suit the request format needed by
the CAcert Certificate Authority. www.CAcert.org

Short Hostname (ie. imap big_srv www2):  [NOM QUI SERVIRA À IDENTIFIER VOTRE CERTIFICAT PLUS FACILEMENT]
FQDN/CommonName (ie. www.example.com) : mon-domaine.fr
Type SubjectAltNames for the certificate, one per line. Enter a blank line to finish
SubjectAltName: DNS:*.mon-domaine.fr
SubjectAltName: DNS:mon-autre-domaine.fr
SubjectAltName: DNS:sous-domaine.troisieme-domaine.fr
SubjectAltName: DNS:

Signature

Une fois cette opération effectuée, un drôle de message devrait apparaître:

-----BEGIN CERTIFICATE REQUEST-----
Ici, il y a - normalement - plein de caractères...
-----END CERTIFICATE REQUEST-----

C’est votre demande de certificat. Copiez la dans le presse papier (y compris le retour à la ligne de fin) puis rendez-vous sur cette page. Collez votre demande de certificat dans le champ dédié puis cliquez sur envoyer. Si tout se passe bien (si vous avez au préalable pensé à ajouter vos noms de domaines sur cette page), le site vous renvoie votre certificat signé! Il ne vous reste plus qu’à le copier puis à l’ajouter dans un fichier que vous nommerez – par exemple – mon-domaine.fr.pem. Pensez bien à ajouter l’extension .pem à votre fichier! Une fois ceci fait, il ne vous reste plus qu’à reconfigurer votre serveur pour qu’il utilise ce certificat!