SSL en toute liberté avec CAcert

Posté le 31 juillet 2010 @ 15 h 06 min par Vanaryon

Dans le cadre de mes articles à propos de l'installation d'un serveur sous Ubuntu (notamment celui concernant le serveur web), je continue ici avec une très belle découverte : une autorité de certification SSL à but non lucratif. Cette autorité se nomme CACert, elle délivre gratuitement des certificats SSL reconnus sous Linux (malheureusement pas encore sous Windows et Mac OS), et elle est animée par la communauté qui l'entoure.

J'utilise au quotidien les certificats provenant de CACert, et je peux vous dire : ce n'est que du bohneur ! Le seul petit soucis, c'est que, bien qu'ils sont reconnus sous Linux, Mozilla Firefox ne les reconnaît pas. Il faut donc ajouter les certificats racines à votre navigateur : classe 1 et classe 3 (cochez toutes les cases puis validez).

Voyons donc, au cours de ce billet, comment sécuriser votre Apache grâce à CACert. C'est parti !

1. Génération de la clé privée

Afin de sécuriser les communications entre différentes entités d'un réseau (serveur/client ou serveur/serveur), il vous faut générer ce que l'on appelle "clé", qui va permettre de chiffrer les données à transmettre, puis de les déchiffrer à la sortie. C'est ce que l'on appelle le chiffrement de bout-en-bout.

Je recommande une force de 2048 bits (la plus répandue) pour votre clé, mais vous pouvez aussi faire plus fort. Veuillez ne pas dépasser les 4096 bits, étant donné que plus la clé est forte, plus les opérations de chiffrement et déchiffrement seront lourdes. De plus, au niveau de la loi, certains pays ont fixé un seuil (je ne me suis pas plus renseigné là dessus, c'est à vous de vous adapter en fonction de votre pays).

Pour générer la clé, nous allons utiliser OpenSSL (qui doit être déjà installé sur votre Ubuntu). Exécutez la commande suivante dans un terminal :

openssl req -nodes -newkey rsa:2048 -keyout serveur.key -out serveur.csr

Veillez à remplacer "serveur" par le nom de domaine à sécuriser, dans un soucis d'organisation. En effet, à l'avenir vous risquez d'avoir plusieurs clés à gérer. Ceci fait, pressez la touche entrée. Des informations vous seront demandées. Remplissez-les, jusqu'à arriver à :

Common Name (eg, YOUR name) []:

À cette ligne, ne renseignez pas votre nom, comme cela laisse à penser, mais indiquez le domaine à sécuriser (comme ici, vanaryon.eu). Si vous voulez certifier tous les sous domaines de vanaryon.eu, inscrivez *.vanaryon.eu.

À la toute fin, des "extra attributes" vous seront demandés, vous n'êtes pas obligé de les spécifier, pressez simplement la touche Entrée pour les ignorer.

Parfait ! Notre clé a été générée, ainsi que le CRT, qui est un fichier de requête de certificat à fournir à CACert lors du processus de certification.

2. Génération du certificat

Affichez le site de CACert pour vous inscrire. Votre compte créé, il est temps d'ajouter votre demande de certificat !

Dans un premier temps, nous devrons prouver que nous sommes bien le propriétaire du domaine à ajouter. Connectez-vous, puis cliquez sur "Domaines" et "Ajouter". Vous accéderez à cette page. Ajoutez simplement la base de votre domaine ici (c'est à dire, pour moi, vanaryon.eu). Un courriel de validation vous sera envoyé sur une adresse d'administration de ce domaine. Si votre domaine n'est pas configuré pour les courriels, il est aussi possible d'envoyer un courriel à l'adresse présente dans votre WHOIS.

Dans un second temps, cliquez sur "Certificats de Serveur" et sur "Nouveau". Plus simplement, affichez cette page. Maintenant, ouvrez le fichier CSR que vous avez généré (il devrait se trouver dans votre dossier personnel). Copiez tout son contenu pour le coller sur la page de CACert précédemment ouverte.

Envoyez le formulaire et répondez par l'affirmative lorsque vous avez vérifié les informations qui vous sont données. Patientez un peu, votre certificat est en cours de génération ! (cela peut être long, ne fermez pas la page, il peut être mis en file d'attente selon l'heure de la journée).

3. Génération de la clé

Lorsque votre certificat est généré, créez un nouveau fichier "serveur.pem" (remplacez "serveur" par votre nom de domaine, comme plus haut), puis ouvrez-le.

Nous allons y placer deux informations :

  • Collez-y le contenu de "serveur.key" en premier ;
  • Collez le code que CACert vous a généré en deuxième

Ceci fait, enregistrez le fichier PEM, puis copiez-le sur un disque amovible, de sorte à ce qu'il soit en lieu sûr.

Enfin, faites une copie de la clé dans le répertoire /etc/ssl/private/ avec la commande suivante (à exécuter dans un terminal) :

sudo cp serveur.pem /etc/ssl/private/serveur.pem

Prenez soin de remplacer, comme toujours, "serveur" par votre nom de domaine. Aussi, si la commande ne fonctionne pas, vous devriez indiquer le chemin absolu vers votre serveur.pem source, avec quelque-chose du genre : "/home/vanaryon/serveur.pem".

4. Déploiement sur le serveur

Nous avons presque terminé ! Il ne nous reste plus qu'à configurer Apache pour qu'il accepte notre certificat et notre clé.

Tout d'abord, si ce n'est déjà fait, ouvrez le port 443 de votre routeur en direction de votre serveur (vous pouvez ne pas avoir besoin de le faire dans le cas d'un serveur dédié en centre de données). Le port 443 est utilisé pour le HTTPS, à la différence du HTTP qui utilise le port 80.

Ensuite, activez le module SSL de Apache :

sudo a2enmod ssl

Ouvrez votre fichier de configuration de Virtual Host (si vous n'en avez pas encore, référez-vous à mon billet sur la configuration d'un serveur web Apache) :

sudo nano /etc/apache2/sites-enabled/000-default

Dupliquez le code de votre Virtual Host déjà existant pour le domaine à sécuriser, puis ajoutez, au tout début :

SSLEngine On
SSLCertificateFile /etc/ssl/private/serveur.pem

Vous remplacerez bien évidemment serveur par votre domaine. Ensuite, remplacez le "80" du tout début, dans par "443".

Enfin, vérifiez bien que le port 443 est ajouté dans votre ports.conf :

sudo nano /etc/apache2/ports.conf

Avec quelque-chose comme ceci :


NameVirtualHost *:443
Listen 443

Si ce code n'est pas présent, vous allez devoir l'ajouter. Puis, redémarrez Apache pour finir :

sudo /etc/init.d/apache2 restart

5. Quelques informations

Avant de pouvoir utiliser votre certificat, sachez plusieurs choses :

  • Les certificats CACert "normaux" sont valides pendant 1 an, vous devrez par la suite les régénérer (rassurez-vous, la procédure sera moins longue que celle employée ici) ;
  • Un certificat CACert n'est pas considéré valide par tous les systèmes, mais plus nous serons à les utiliser, plus ils auront de chance d'être reconnus dans le futur ;
  • Faites toujours des copies de sauvegarde de vos clés privées, que ce soit pour du SSL, du GPG ou autre ;
  • Ne vous limitez pas que à Apache : les certificats fournis par CACert sont bien entendu universels, et peuvent être utilisés pour votre serveur mail, XMPP ;
  • CACert est une organisation à but non lucratif que vous pouvez aider sur votre temps libre

6. Liens externes

Voici quelques liens utiles pour continuer votre exploration et apprentissage :

Les rétroliens

  1. Ping : Tweets that mention SSL en toute liberté avec CAcert | Le weblog de Vanaryon -- Topsy.com le 31 juillet 2010

Les commentaires

  1. Tuxicoman
    31 juillet 2010 à 15:37

    Mais comment on ajoute la reconnaissance de Cacert sur Android?

  2. Vanaryon
    31 juillet 2010 à 15:59

    Aïe, là je ne saurai pas te le dire, je n'ai jamais essayé Android. Essaie de te documenter auprès de Google, pour ajouter des certificats racines.

  3. jp.fox
    31 juillet 2010 à 17:22

    Si CACert distribue si facilement des certificats, je n'ai pas vraiment envie d'ajouter leurs certificats racines à mon navigateur. Sinon, il suffit à un site pirate de demander un certificat SSL pour son https et hop, moi je tombe dans le panneau en voyant son certificat validé par une autorité tierce :-(

    Ce système parait pratique mais je préfère encore ajouter mon certificat manuellement, même s'il n'est pas validé, plutôt que de faire confiance à un tiers de confiance dont on peut se méfier.

  4. ppmt
    31 juillet 2010 à 17:27

    Salut,

    J'ai essaye d'enregistrer ue clef mais je dois rater une truc...

    La clef il faut la generer depuis la machine qui heberge le domaine?

    de plus en copiant la clef il me dit que le domaine n'est pas valide et quand je l'ajoute il faut le verifier. Il me propose bien des addresses ou envoyer la validation mais aucun des choix n'existe...

    enfin bon c'est pas trop grave car je le fais juste pour m'"amuser"

  5. Yann
    31 juillet 2010 à 17:31

    Sinon il y a les certificats StartSSL (de StartCom) gratuits est reconnus par déjà plusieurs navigateurs (Firefox, ie 7+ ...) j'en parle la : https://blog.yannguern.com/developpement/des-certificats-ssl-gratuit/

  6. Vanaryon
    31 juillet 2010 à 17:50

    @jp.fox : justement, c'est là qu'intervient la communauté ! Elle "surveille" les certificats validés par le système.

    Sinon pour obtenir un certificat "avancé", il faut qu'un membre de CACert vérifie l'identité de la personne qui veut valider son certificat, IRL.

    D'ailleurs, un site pirate qui veut obtenir un certificat, même payant, le fera. Et personnellement, je fais plus confiance à une autorité de certification à but non lucratif comme CACert qu'à des vautours comme chez Verisign.

    : pas forcément depuis la machine qui l'héberge. S'il dit que ton certificat n'est pas valide, c'est peut-être que tu as mal rempli les champs du style "Organisation" et autres. Et fait attention, le champ "Name" c'est bien le domaine qu'on y entre, et pas son prénom.

    : aussi, mais je n'ai jamais réussi avec eux :)

  7. jp.fox
    31 juillet 2010 à 18:32

    S'il y a vérification de l'identité de la personne, c'est différent :-)

  8. Tuxicoman
    31 juillet 2010 à 20:52

    Cacert donne un certificat en envoyant un email de verif à une boitemail *.

    C'est surtout un moyen d'avoir des echnages chiffrés sans man in the middle sur tn réseau local/hadopi :p

  9. Didier Misson
    1 août 2010 à 00:24

    Pour pouvoir faire des certificats valables 2 ans, j'ai du me faire parrainer : c'était au Fosdem à Bxl. J'ai du rencontrer plusieurs personnes (on reçoit des points à chaque fois) et prouver mon identité (2x : carte d'identité + permis de conduire (ou autre)).

    Il y a donc un certain contrôle, oui.
    La seule chose gênante, c'est que CACert n'est pas connu par défaut par les navigateurs...
    Ce n'est pas un problème pour un usage perso, mais pour un site accessible à des clients ou au grand public... ça, ça pose problème

    ;-)

  10. jpp
    1 août 2010 à 00:40

    je confirme, c'est tout aussi simple avec startssl.com, tout aussi gratuit et reconnu par 99% des navigateurs/platformes...
    (startssl a egalement une bonne documentation pour apache)

  11. Vanaryon
    1 août 2010 à 13:17

    Oui mais pour des extrémistes du LL comme moi, il *faut* que mes certificats soient validés par un organisme à but non lucratif, chose que StartCOM n'est pas ;)

  12. ppmt
    1 août 2010 à 18:45

    BOn j'ai reussi a valider ma clef...me restes plus qu'a conctacter mon hebergeur pour leur demander de la mettre sur mon site et je ferais mumuse apres :)

  13. Nico
    2 août 2010 à 09:12

    Le certificat ne sert pas à certifié un site mais une connexion. Comme le dit "Tuxicoman" : "C'est surtout un moyen d'avoir des échanges chiffrés sans man in the middle "

  14. OlivierM
    2 août 2010 à 13:36

    Sauf que l'alternative de jp.fox n'est pas de prendre un certificat "du marché", mais bel et bien de choisir l'autosigné (même si dans ce cas je préfère autosigner une CA qu'un simple certificat, mais bon).

    Le fait que CACert ne soit pas spécialement reconnu par les navigateurs courants rend l'initiative belle, mais un peu stérile. Si je dois absolument installer une CA sur le navigateur des mes usagers, j'aime autant que ça soit une CA que je maitrise intégralement. C'est un peu égoïste, mais le rapport complexité/sécurité est clairement plus favorable.

    Le jour où CACert sera reconnu de base par FF sur toutes les plateformes (au minimum), ce pourra être différent. Mais pour l'instant, j'ai aussi vite fait de préparer une page bien didactique avec le moyen d'installer ma CA perso, et après tous mes sites ont des certificats signés par cette dernière.

  15. ptitchat
    5 octobre 2010 à 19:01

    Bonjour,

    Dans quel mesure peut-on faire confiance a CACERT ?
    Si CACERT communique les "clés" de son AC à un tier (ex Police ou autre), letier ne pourrait-il pas déchiffrer les communications ou s'authentifier avec les certificats des AC enfants (car connaissant les clés initiales) ??
    Quitte à me prendre un message d'avertissement dans la gueule, autant qu'il soit lié à mon certificat et mon AC "maison", sans lien avec une AC dont on ne me garantie pas la sécurité à 100%.

    Ais-je tort ?

    Ptitchat

  16. Vanaryon
    5 octobre 2010 à 20:16

    Salut,

    Dans un sens tu n'as pas tord, c'est vrai. Mais finalement, la question se pose aussi pour les autorités commerciales.

    De mon côté, je fais bien plus confiance aux petites organisations bienveillantes à but non lucratif qu'aux monstrueuses puissances de l'argent.

    Et je voudrai ajouter une chose : CACert ne demande jamais de clé privée, sans laquelle il est impossible de chiffrer et déchiffrer.

    Une quelconque police aurait donc besoin de ceci. Or, CACert ne demande que la clé de demande de certificat, ce qui n'est pas potentiellement dangereux, et il ne stocke ensuite que le certificat.

    Ça répond à ta question ? :)

Laisser un commentaire