Les certificats

Nous allons créer tous les certificats nécessaires à l'utilisation de EAP-TLS. Il nous faudra :

  • un certificat qui représentera notre autorité de certification, dont la partie publique devra être disponible pour le serveur RADIUS et pour tous les clients. Ce certificat doit permettre d'authentifier tous les autres certificats que nous devrons créer,
  • un certificat pour le serveur RADIUS. La partie publique de ce certificat sera envoyée par le serveur à tous les supplicants lorsqu'ils voudront s'attacher au point d'accès,
  • un certificat par client, dont la partie publique sera envoyée au serveur RADIUS, en guise de code d'accès.

Pour réaliser tout ceci, nous faisons appel à OpenSSL. Mais la ligne de commande n'est pas bien ergonomique. Fort heureusement, il existe un outil qui va nous aider grandement : TinyCA.

TinyCA est une application (perl/GTK) qui permet de manipuler plus facilement OpenSSL. Nous pourrons réaliser et gérer avec les divers certificats qui nous seront nécessaires. Il n'est ni utile ni même souhaitable d'effectuer cette opération sur le serveur FreeRADIUS. Au contraire, il est même vivement conseillé de réaliser les opérations qui suivent sur une machine inaccessible depuis le réseau.

Création d'une CA

C'est bien sûr la première opération à réaliser. D'ailleurs la fenêtre qui suit est la première que vous verrez au premier lancement de tinyca :

Puis vient la configuration. Pour les tests, nous garderons les valeurs par défaut :

Le temps que les clés se construisent, et nous obtenons :

Configuration des préférences

Le menu « préférences » va nous permettre de donner quelques directives fondamentales pour ce que nous avons à faire.

Pour les certificats du serveur, nous devons ajouter l'extension 1.3.6.1.5.5.7.3.1, ce qui, en français, signifie que le certificat est destiné à un serveur d'authentification. De même, choisissez la durée de validité du certificat (ici, un an). A échéance, il faudra penser faire un nouveau certificat.

Pour les certificats des clients, nous devons ajouter l'extension 1.3.6.1.5.5.7.3.2, qui signifie que les certificats sont destinés à authentifier les clients. Pensez aussi à leur durée de validité.

Création du certificat du serveur

La création des divers certificats (serveur et clients) suit la même procédure, en utilisant le paramétrage par défaut effectué plus haut. Il suffit de compléter les champs vides :

En réalité, nous n'avons créé qu'une requête de certificat. Cette requête doit maintenant être validée par la CA, ce qui se traduit par l'apposition de la signature de la CA. Il s'agit du mot de passe choisi lors de la création de la CA :

Notez que lors de cette opération, il est possible de modifier la durée de validité. C'est important surtout pour les certificats clients. Il est en effet possible d'envisager la création de certificats à durée très courte, dans le cas de clients de passage, par exemple, ou pour des autorisations ponctuelles.

A l'issue de la signature, assurez-vous que le compte-rendu est positif. Nous devons retrouver le certificat inscrit dans la liste :

Création d'un certificat client :

Procédure identique :

Je passe les détails de signature. Au final, nous avons :

Exportation des certificats

Il nous faut maintenant exporter les certificats à installer sur le serveur et sur le(s) client(s).

Certificat de la racine de confiance (CA)

Ce certificat, qui représente la racine de confiance, devra être présent sur le serveur RADIUS et sur tous les clients. Nous devons donc l'exporter dans des formats compatibles avec OpenSSL (pem) et Windows (der).

Rappelons que c'est ce certificat qui permettra :

  • au serveur de s'assurer que les certificats présentés par les clients sont bien authentiques,
  • aux clients de s'assurer que le certificat présenté par le serveur est bien authentique.

Vérifions que l'exportation est réussie :

Et recommençons l'opération, mais au format .der (je passe les détails).

Certificat du serveur

Ce certificat ne sera installé que sur le serveur FreeRADIUS, donc le format pem (avec la clé privée et l'empreinte intégrées) suffira :

Certificat client

Ce certificat servira à « user1 ». Suivant qu'il utilisera Windows ou GNU/Linux, il lui faudra un .pem ou un .pkcs#12 (clé privée intégrée). C'est un utilisateur bicéphale, son portable est en « dual-boot ».

L'exportation au format .pem se fait de la même manière que pour le serveur, passons les détails. En revanche, pour le format pkcs#12, c'est un petit peu plus compliqué :

Deux mots de passe sont demandés :

  • le premier (Key password) correspond à celui qui a été saisi lors de la création du certificat,
  • le second (Export Password) sera nécessaire lors de l'installation du certificat chez le client.

Au final, nous avons dans notre répertoire d'exportation :

  • root_maison_CA-cacert.der
  • root_maison_CA-cacert.pem (les certificats de l'autorité)
  • sysop@maison.mrs-cert.pem  (le certificat du serveur)
  • user1@maison.mrs-cert.pem
  • user1@maison.mrs-cert.p12 (le certificat du client, dans les deux formats nécessaires).

Et la révocation

Il peut se faire, pour de multiples raisons, que l'on doive rendre inopérant un certificat avant sa date d'expiration :

  • la clé privée est compromise,
  • le possesseur du certificat n'en a plus besoin plus tôt que prévu,
  • le possesseur du certificat a enfreint les règles et doit se voir banni du réseau,
  • et tant d'autres raisons.

Il faut donc disposer d'un moyen pour que le serveur RADIUS puisse rejeter des certificats non expirés, mais désormais interdits d'accès.

Dans un tel cas, il faut alors pouvoir créer un certificat de révocations qu'il sera nécessaire d'installer sur le serveur, et le configurer pour qu'il le consulte à chaque authentification. Tinyca sait réaliser de tels certificats. Ici, nous avons révoqué le certificat de « user2 » :

Il nous faut maintenant exporter un certificat des révocations :

Attention à la durée de validité d'un tel certificat. Bien entendu, ce certificat ne doit jamais expirer.

Nous retrouvons dans le répertoire d'exportation le certificat :

root_maison_CA-crl.pem