Home » BTS SIO (Services Informatiques aux Organisations) » Installation d’une autorité de certification (Linux)

Installation d’une autorité de certification (Linux)

Le but est d’accéder aux sites internes avec un certificat (notamment SSL pour Serveur Web). Let’s Encrypt ne délivre que des certificats sur les IP publiques.

Ainsi, il est nécessaire d’avoir sa propre autorité de certification afin de créer ses propres certificats reconnus par tous.

Nous allons créer une autorité de certification interne dite « racine » qui permettra de valider les certificats qui lui seront présentés à partir de cette autorité de certification.

Nous créerons celle-ci sur une machine installée sous Debian 12.9 et OpenSSL nomée khepri.

0. Préparation

mkdir -p /etc/ssl/certificats/CA

Ce dossier contiendra tous les fichiers nécessaires ainsi que le fichier « CA.crt » à distribuer à tous. Ce certificat représentera à notre autorité de certification privée.

1. Création de l’autorité de certification

Ensuite nous allons créer la clé privée de l’autorité de certification :

root@khepri:~# openssl genrsa -des3 -out /etc/ssl/certificats/CA/CA.key 2048

La clé sera codée sur 2048 bits. Une passphrase doit être saisie. Pour ne pas l’oublier (sait-on jamais !) je l’ai inscrite dans un fichier stocké dans ce répertoire (commande : nano passphrase). A chaque création de certificat avec ce certificat, la passphrase sera demandée. En cas d’oubli…

Puis nous allons générer le certificat root (racine) de l’autorité de certification au format « .pem » :

root@khepri:~# openssl req -x509 -new -nodes -key /etc/ssl/certificats/CA/CA.key -sha256 -days 10000 -out /etc/ssl/certificats/CA/CA.pem

Une liste de questions va être demandée (pays, état, ville, organisation, email, common name, …). L’autorité de certification sera utilisable 10.000 jours (soit plus de 27 ans, ça laisse le temps…).

Ensuite nous allons générer le certificat root (racine) au format .crt (fichier final à redistribuer en tant qu’autorité de certification racine sur toutes les machines clientes et les serveurs utilisant ledit certificat) :

root@khepri:~# openssl x509 -in /etc/ssl/certificats/CA/CA.pem -inform PEM -out /etc/ssl/certificats/CA/CA.crt

2. Installer l’autorité de certification sur une machine

Nous avons créé 3 fichiers dans le répertoire /etc/ssl/certificats (CA.key, CA.pem, CA.crt). Le fichier « CA.crt » sera utilisé pour l’installation sur les machines.

J’ai choisi d’installer ce certificat au niveau de l’OS (système d’exploitation) que ce soit Windows ou Linux.

2.1 Installation sur une machine Windows

Il convient d’ouvrir une boite de commande en tant qu’administrateur (élévation de privilèges).

certutil.exe -addstore root CA.crt

Il est possible d’installer ce certificat dans chaque navigateur. Il conviendra de se référer à la documentation du navigateur afin de connaître la marche à suivre (Firefox : about:preferences#privacy, Chrome : chrome://settings/security, …).

2.2 Installation sur une machine Linux

D’abord, on va copier le fichier CA.crt dans le répertoire des autorités (/usr/local/share/ca-certificates/) :

cp /etc/ssl/certificats/CA/CA.crt /usr/local/share/ca-certificates/

Ensuite mettre à jour les autorités :

update-ca-certificates
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
Last login: Sun Feb 23 14:21:34 2025 from 172.31.0.254
root@ra-horakty:~# update-ca-certificates
Updating certificates in /etc/ssl/certs…
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d…
done.

2.3 Export du certificat au format pfx pour Windows Serveur

Cela va servir à créer une autorité de certification secondaire sur le serveur Active Directory.

openssl pkcs12 -export -in CA.crt -inkey CA.key

root@khepri:/etc/ssl/certificats/CA# openssl pkcs12 -export -in CA.crt -inkey CA.key -out certificat_CA.pfx
Enter pass phrase for CA.key:
Enter Export Password:
Verifying - Enter Export Password:
root@khepri:/etc/ssl/certificats/CA# ls
CA.crt CA.key CA.pem certificat_CA.pfx

Il restera plus qu’à intégrer ce certificat sur le serveur Active Directory en utilisant AD CS.

L’autorité de certification étant opérationnelle, il convient de créer les certificats utilisés afin de sécuriser les flux entre client et serveur (notamment Web).

3. Création d’un certificat pour un hôte

D’abord nous allons créer un répertoire pour notre hôte :

mkdir -p /etc/ssl/certificats/hote

NB : hote est à remplacer par le nom de machine nécessitant ce certificat. Exemple : ra-horakty

root@khepri:~# mkdir -p /etc/ssl/certificats/ra

Ensuite nous allons créer la clé privée de l’hôte :

openssl genrsa -out /etc/ssl/certificats/hote/hote.key 2048

J’ai décidé de ne pas mettre de passphrase sur cette clé. Cela évitera de la saisir à chaque utilisation du certificat.

Attention, cette manipulation abaisse le niveau de sécurité, puisque n’importe quelle personne arrivant à obtenir votre clé pourra l’utiliser et donc usurper votre identité. En effet, par défaut la clé RSA est encryptée, et le mot de passe sert donc à la décrypter. Une fois le mot de passe supprimé, la clé ne sera plus stockée encryptée.

Soit ici (serveur ra-horakty) :

root@khepri:~# openssl genrsa -out /etc/ssl/certificats/ra/ra-horakty.key 2048

On peut générer le certificat au format « .pem » (Privacy Enhanced Mail) si nécessaire :

openssl req -x509 -new -nodes -key /etc/ssl/certificats/hote/hote.key -sha256 -days 10000 -out /etc/ssl/certificats/hote/hote.pem

Soit ici (serveur ra-horakty) :

root@khepri:~# openssl req -x509 -new -nodes -key /etc/ssl/certificats/ra/ra-horakty.key -sha256 -days 10000 -out /etc/ssl/certificats/ra/ra-horakty.pem

Une liste de questions va être demandée (pays, état, ville, organisation, email, common name, …). L’autorité de certification sera utilisable 10.000 jours (soit plus de 27 ans, ça laisse le temps…).

Puis on génère la demande de signature de certificat ou certificate signing request (format .csr) :

openssl req -new -key /etc/ssl/certificats/hote/hote.key -out /etc/ssl/certificats/hote/hote.csr

Soit ici (serveur ra-horakty) :

root@khepri:~# openssl req -new -key /etc/ssl/certificats/ra/ra-horakty.key 
-out /etc/ssl/certificats/ra/ra-horakty.csr

Attention, très important : dans les questions qui sont demandées, il faut mettre le DNS du serveur pour le Common Name. Sinon, le certificat ne sera pas reconnu et le site sera considéré comme nom sécurisé (expérience, expérience, …).

4. Signature du certificat de l’hôte par l’autorité de certification

D’abord on va créer un fichier de configuration :

nano /etc/ssl/certificats/hote/hote.ext

Soit ici (serveur ra-horakty) :

root@khepri:~# nano /etc/ssl/certificats/ra/ra-horakty.ext

Le contenu est le suivant :

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = hote

Soit, ici :

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = ra-horakty.turgot-paris.fr
DNS.2 = glpi.turgot-paris.fr

Ici, le serveur dispose de 2 noms DNS (cname), nom de machine complet ainsi que nom du service rendu par celle-ci. Il est possible d’ajuster ce fichier en fonction du nombre de noms DNS correspondant à la même adresse IP, soit au même serveur.

Pour signer le certificat de l’hôte par l’autorité de certification précédemment créée nous allons exécuter la commande suivante :

openssl x509 -req -in /etc/ssl/certificats/hote/hote.csr -CA /etc/ssl/certificats/CA/CA.pem -CAkey /etc/ssl/certificats/CA/CA.key -CAcreateserial -out /etc/ssl/certificats/hote/hote.crt -days 10000 -sha256 -extfile /etc/ssl/certificats/hote/hote.ext

Soit ici (serveur ra-horakty) :

root@khepri:~# openssl x509 -req -in /etc/ssl/certificats/ra/ra-horakty.csr 
-CA /etc/ssl/certificats/CA/CA.pem 
-CAkey /etc/ssl/certificats/CA/CA.key 
-CAcreateserial -out /etc/ssl/certificats/ra/ra-horakty.crt -days 10000 -sha256 
-extfile /etc/ssl/certificats/ra/ra-horakty.ext

Il conviendra de renseigner la passphrase de l’autorité de certification.

5. Intégration du certificat dans apache2

Cela permettra d’utiliser la version SSL d’Apache2, sur le port 443.

Au préalable, il convient de copier les fochiers créés sur la machine hôte (ra-horakty) sans oublier le fichier de l’autorité de certification (CA.crt). Personnellement, j’ai choisi de les déposer dans le dossier /etc/ssl/ra/ créé pour l’occasion.

Il conviendra d'ajouter dans le virtualhost suivant les lignes suivantes : 

<virtualhost *:443>
ServerName …

SSLEngine on
SSLCertificateFile /etc/ssl/ra/ra-horakty.crt
SSLCertificateKeyFile /etc/ssl/ra/ra-horakty.key
SSLCertificateChainFile /etc/ssl/ra/CA.crt

</virtualhost>

Ce fichier existe dans le dossier /etc/apache2 dès que le module mod_ssl a été activé (voir sur Internet comment l’activer sur une distribution Debian ou RedHat, par exemple).

Cette configuration permet d’automatiquement rediriger les connexions « http » (port 80) en « https » (port 443) et d’utiliser les fichiers du certificat et de la clé de l’hôte.


Leave a comment

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