Une autorité de certification ou mini PKI à la maison avec XCA (graphique)

Abandonnons le mode ligne de commande avec openssl, pour distribuer des certificats TLS à usage domestique. XCA, disponible sous Linux et Windows, est en mesure de gérer une autorité de certification. (Article inspiré de : Managing a PKI with XCA)

Pourquoi ?

Paske qu’on peut le faire, est une raison suffisante. Il est difficile de générer des certificats serveurs pour des machines non joignable depuis internet (ex : un NAS), et pour certain usage une authentification par certificat client est plus sûre et sans mot de passe.

Ce que nous allons faire

A l’aide XCA nous allons créer notre propre AC (autorité de certification), signer des certificats serveurs et générer des certificats utilisateurs. Cet nouvelle AC devra être déployée sur les équipements l’utilisant (PC linux/Windows, mobile iOS/Lineage) – la partie la plus longue.

Mes choix

L’algorithme de signature secp384r1, validé par le NIST, correspond à un RSA7K et est supporté par une majorité d’OS. SHA-384 est cohérent en matière de robustesse. Ces choix sont super-très-beaucoup robustes par rapport à l’usage prévu.

L’absence de CRL (liste de révocation) se justifie par un usage restreint de cette AC. Si une clé privée, vient à être compromise, le mieux est de changer l’identité du serveur ou de l’utilisateur. L’entretien d’une CRL est assez fastidieux, il faut la régénérer régulièrement et la déposer sur un serveur web qui doit tourner en permanence. XCA ne prévoit pas d’automatisme.

Une AC à tout faire. Pour un grand déploiement, les bonnes pratiques voudraient que l’on dédie une AC à un seul usage : certificat serveur, utilisateur, chiffrement, horodatage, signature de code,…

Démarrage

Après avoir lancé XCA, dans Fichier – Nouvelle base de données, choisir un chemin d’accès où la créer, puis saisir un long mot de passe pour protéger la base dont la future clé privée de l’autorité de certification (Keepass peut vous aider pour le générer et le retenir).

Copie écran création d'une base

Création de la racine

Dans l’onglet certificat, clic sur nouveau certificat, régler l’algorithme de signature sur SHA384, le modèle sur [défaut CA] et clic sur appliquer les extensions. Elles positionnent les extensions pour que le certificat soit considéré comme une autorité de certification. Une autorité de certification est un certificat auto-signé.

Copie écran - Créer le certificat racine
XCA – Créer le certificat racine

Dans l’onglet sujet, je renseigne quelques champs (seul le « CommonName » est franchement utile), puis je clique sur Générer une nouvelle clé.

Copie écran - créer un certificat Sujet
XCA – Objet du certificat racine

Dans la nouvelle fenêtre, dans type de clé, je choisis EC pour une courbe elliptique, puis la courbe secp384r1 (Windows 10 ne support p512 qu’après modification de paramètres). Puis, clic sur créer. Pour rester cohérent, nos certificats utiliserons aussi des courbes elliptiques pour leurs bi-clés.

Copie d'écran de la création de la clé
XCA – générer la bi-clé.

Une boite de dialogue nous informe de la création de l’objet le plus précieux de notre PKI – la clé privée de notre autorité de certification. Elle est stockée dans la base.

Dans l’onglet Extensions, modifier la période à 30 années (10 par défaut). A noter la petite coche ‘Critical’. Une extension ‘critique’ doit être connue pour faire confiance au certificat. Par exemple, si mon navigateur reçoit un certificat avec une extension critique qu’il ne connaît pas, il doit le rejeter.

Copie d'écran de l'onglet extensions
Onglet extensions

Les onglets Usage de la clé, Netscape et Avancé ont été remplis à partir du modèle. Clic sur ‘OK’ pour créer le certificat.

Déployer cette nouvelle racine

Votre nouveau certificat racine doit être reconnu par vos équipements (serveurs, PC, téléphones). Tout d’abord l’exporter, clic sur l’onglet certificat, puis exporter, choisir un chemin et OK. Ceci n’exporte que la partie publique du certificat (sans la clé privée), raison pour laquelle XCA ne propose pas de mot de passe.

Copie export certificat
Exporter le certificat racine

Debian Trixie / Ubuntu 24.04

Après avoir transférer le nouveau certificat racine sur la machine, en ligne de commande :

sudo cp /home/marc/Documents/Racine_Maison.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
Copie d'écran mise à jour magasin debian.
Import de la racine à Ubuntu et Debian

Il n’est pas nécessaire de déployer l’AC sur un serveur web, présentant un certificat émis sur celle-ci. Le serveur web ne vérifie pas l’authenticité du certificat qu’il envoie. Le navigateur, lui, doit le fait. Certaine implémentation commerciale l’exige, mais c’est inutile.

Firefox

Sous Linux Firefox ne reprends pas les autorités de certification de l’OS. Dans les paramètres rechercher ‘certificats’, puis sélectionner ‘Gérer les certificats’

Paramètres Firefox
Recherche certificats

Dans le gestionnaire de certificats clic sur autorités et importer…

Copie d'écran autorités de certification
Importer l’autorité de certification

Après avoir sélection le certificat de la nouvelle autorité (Racine_maison.crt chez moi), cocher les deux cases ‘confirmer cette AC…

Copie d'écran de confirmation
Confirmer l’usage de la novuelle AC

Dans le gestionnaire de certificat, la nouvelle AC apparaît dans la liste. Clic sur OK et fermer l’onglet de paramètre de Firefox.

iOS 26

Transférer le certificat racine vers le mobile, (ex : mail), le toucher. Puis, dans les réglages, rechercher « VPN et gestion de l’appareil », toucher la nouvelle AC dans « profil télécharger » et suivre les instructions (il doit manquer une ou deux étapes dans les copies d’écran ci-dessous).

Copie d'écran d'installation de l'AC sur iOS
iOS – installation de l’AC

Puis (paske, ce n’est pas fini), il faut faire explicitement confiance à cette nouvelle AC. Aller dans les réglages – général – Informations, descendre en bas, réglages des certificats et valider la nouvelle AC.

Lineage 23

Aucune idée, si sur Android 16, c’est identique. Après avoir déposer le certificat de l’AC racine dans les fichiers du téléphone, aller dans les paramètres, rechercher « Certificat » sélectionner Certificat CA, puis une seconde fois. Sur l’écran d’avertissement toucher « Installer quand même », puis s’authentifier, enfin sélectionner le fichier de certificat de l’AC racine.

Suite de copie d'écran de l'installation de l'AC rachine dans Lineage 23.2
Lineage 23.2 – Installation de l’AC racine.

Windows 10 22H2

Après avoir déposer le certificat de l’AC racine sur le système de fichier, double-cliquer dessus, puis cliquer sur « installer un certificat ». Sélectionner « Ordinateur Local » (si vous avez les droits d’admin, sinon choisir « utilisateur actuel »), puis clic suivant. Réaliser une élévation de privilège. Choisir placer ‘tous les certificats dans le magasin suivant » (*), clic sur parcourir, choisir « Autorités de certification racine de confiance », OK, puis suivant. Enfin clic sur terminer.

(*) Par défaut Windows placera le certificat dans les autorités de certification intermédiaires. Firefox ne lit pas ce dossier.

Suite de copie d'écran d'installation de l'AC racine sous windows 10
Windows 10 – Installation de l’AC racine

A partir de là nous sommes prêts à utiliser nos nouveaux certificats.

Signer un certificat serveur

Générer le CSR sur le serveur

Ici, il s’agit d’un serveur apache sous Linux dont le nom est deb13.dync.fr. Je génère une bi-clé elliptique et un csr (requête de certification)

sudo openssl ecparam -out /etc/ssl/private/ec_web.key -name secp384r1 -genkey
sudo openssl req -new -key /etc/ssl/private/ec_web.key -out ec_web.csr -subj "/CN=deb13.dync.fr" -addext "subjectAltName=DNS:deb13.dync.fr"

et je récupère le fichier ec_web.csr sur la machine avec XCA.

Créer son modèle de certificat

Ceci est à faire qu’une seule fois, je le fais juste pour augmenter la durée de validité à 3 ans. Le modèle va permettre de positionner certain champs du certificat, en particulier les extensions concernant son usage.

Dans l’onglet modèle, clic sur nouveau. Dans la boite d’initialisation, je sélectionne [default] TLS_server

Copie nouveau modèle
Nouveau modèle de certificat serveur

Dans l’onglet sujet, donner un nom explicite.

Ecran sujet du modèle
Création d’un modèle : sujet

Dans l’onglet extensions, je positionne la durée de validité des certificats à 3 ans. Si vous avez des clients Apple (iOS ou MacOS), cette durée ne peut excéder 825 jours (2ans et 3 mois).

Copie d'écran extension
Durée à 3 ans

Signer le CSR sur XCA

Dans l’onglet « Requêtes de signature de certificats », clic sur importer et sélectionner ec_web.csr.

copie d'écran d'import d'un CSR
Import d’un CSR

Dans l’onglet certificats, clic sur nouveau certificat. Dans l’onglet source,

  • cocher la case signer cette requête,
  • sélection la requête importée,
  • sélectionner « utiliser ce certificat pour signer »,
  • sélection le certificat racine nouvellement créé,
  • positionner l’algorithme de signature à SHA384,
  • sélectionner le modèle nouvellement créer,
  • clic sur appliquer tout,
  • OK
Copie écran signer un certificat
XCA – Signer un certificat

Il est aussi possible de signer directement depuis l’onglet « requêtes de signature de certificat » à partir d’un clic droit. La requête de signature n’est plus utile, elle peut être supprimée de XCA.

Enfin exporter le certificat. Dans l’onglet certificat, clic sur le petit chevron à gauche de l’AC racine, clic sur le certificat, exporter, puis saisir le chemin du fichier.

Copie écran export certificat
Export du certificat serveur

Retour sur le serveur web

Copier le certificat serveur dans /etc/ssl/certs/. Puis dans le fichier de configuration du serveur Apache (ex default-ssl.conf) positionner les deux variables de certificat comme suit :

SSLCertificateFile      /etc/ssl/certs/ec_web.crt
SSLCertificateKeyFile   /etc/ssl/private/ec_web.key

Redémarrer apache par sudo apachectl restart.

Si tout s’est bien passé, l’accès au serveur web depuis un navigateur muni de la nouvelle AC, se fait sans alerte.

Générer certificat client

L’usage est essentiellement pour l’authentification des utilisateurs. Une configuration pour Apache est décrite dans un article précédent.

Un modèle pour une durée de validité de 3 ans.

Comme pour le modèle serveur, créer un nouveau modèle à partir de « [Default]TLS_Client » avec une durée de validité de 3 ans.

Un nouveau certificat

Nous allons directement générer la clé dans XCA. La bonne pratique sécurité, est de procéder comme pour le certificat serveur, générer la bi-clé et le CSR sur la machine utilisatrice, puis signer avec XCA et intégrer le tout dans le client. C’est faisable sur un PC linux ou Windows, sur un téléphone mobile j’ai un doute.

Dans le premier onglet « Source », cocher le bouton »Utiliser ce certificat pour signer » et sélectionner son autorité. Positionner l’algorithme de signature à SHA384. Sélectionner le nouveau modèle TLS_Client_3ans et cliquer sur « Appliquer les extensions ».

Copie d'écran créer un certificat onglet source
XCA – Créer un certificat

Aller à l’onglet Sujet. Renseigner quelques champs, seul le CommonName est nécessaire et cliquer sur Générer une clé.

Copie d'écran Créer un certificat onglet sujet

Saisir le même type clé que pour la racine.

Copie d'écran de la génération de clé de l'utilisateur.
XCA – Générer la clé du certificat client.

Valider la boite de dialogue d’information de génération de clé, puis une fois revenu à l’onglet Sujet cliquer sur OK, pour créer le certificat.

Export du certificat

La nouvelle clé se trouve dans l’onglet éponyme. Dans l’onglet certificat sélection le nouveau certificat, puis cliquer sur Exporter.

Export du certificat Client
XCA – export du certificat

Choisir un nom de fichier et le format pkcs (*.pfx ou .p12). Dans ce format seront mis dans le même fichier le certificat et sa clé privée (indispensable pour utiliser le certificat). Le format « pkcs#12 chain » ajoutera le certificat de l’AC racine, voir des AC intermédiaire s’il y en a.

Copie d'écran, choix du format
XCA – Choix du format d’export

Saisir un mot de passe assez long et complexe pour éviter le vol du certificat pendant le transit vers le client. Il protège la clé privée du certificat.

Copie écran saisi mot de passe
XCA – Saisie mot de passe

Import du certificat dans un client

Le certificat doit être intégré au client qui va l’utiliser. Les mécanismes ressemblent à ceux illustré pour le certificat Racine. Côté Linux, je ne connais pas de « magasin utilisateur » utilisable par plusieurs logiciels. Je l’illustre avec Firefox.

Dans les paramètres de Firefox rechercher certificats, puis cliquer sur ‘Gérer les certificats’.

Copie d'écran paramètre Firefox
Firefox – paramètres

Aller à l’onglet ‘vos certificats’, puis cliquer sur « Importer… »

Copie d'écran paramètre Firefox
Firefox – paramètres

Rechercher le fichier de certificat (.pfx) et saisir le mot de passe. Le certificat est prêt à être utilisé.

Copie d'écran du gestionaire de certificat
Firefox – gestionnaire de certificats

Je conseille vivement de détruire le fichier pfx, il ne sert plus à rien.

Un premier test avec un serveur web configurer pour accepter cette nouvelle AC donne ceci :

copie d'écran accès par authentification certificat client.
Firefox – sélection du certificat

S’en est terminé du petit panorama de XCA.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *