====== Autorité de certification privée avec Easy RSA ======
**//Contributeurs : Démarche reprise du travail de A. Leroy et T. Ledoux (SISR2022)//**
**//Source//** : https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-a-certificate-authority-ca-on-debian-10-fr
RSA (Rivest–Shamir–Adleman du nom des créateurs) est un système cryptographique de gestion de clés asymétriques.
L'**outil easy-rsa** est son implémentation, notamment sous Linux.
Cet outil permet de mettre en place une infrastructure à clé publique ou [[autoritecertif|autorité de certification]].
===== Installation et configuration =====
=== Procédure ====
- installer le paquetage easy-rsa
- [préparation du dossier de gestion de l'infrastructure]
- paramétrage du fichier de configuration
- création de l'autorité de certification
==== Installation du paquetage ====
apt update
apt install easy-rsa
==== Préparation du dossier (optionnel) ====
L'installation ajoute des fichiers dans **///usr/share/easy-rsa//**. Pour simplifier l'accès, on peut créer un dossier virtuel lié par un lien symbolique au dossier /usr/share/easy-rsa/.
mkdir ~/easy-rsa
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
chmod 700 ~/easy-rsa
cd ~/easy-rsa
./easyrsa init-pki
==== Paramétrage du fichier ====
Par défaut, l'outil exploite des valeurs prédéfinies. On doit donc les personnaliser en fonction du contexte en adaptant le fichier exemple disponible lors de l'installation (qu'on va copier).
cd ~/easy-rsa
cp vars.example vars
nano vars
On ira modifier les paramétrages, notamment ceux d'identification de l'entreprise pour l'autorité (les numéros de ligne sont donnés à titre indicatif). On peut laisser les valeurs par défaut sur les algorithmes pour plus de compatibilité.
95 - set_var EASYRSA_REQ_COUNTRY "VOTREPAYS"
96 - set_var EASYRSA_REQ_PROVINCE "VOTREREGION"
97 - set_var EASYRSA_REQ_CITY "VOTREVILLE"
98 - set_var EASYRSA_REQ_ORG "VOTREENTREPRISE"
99 - set_var EASYRSA_REQ_EMAIL "EMAILADMIN"
100 - set_var EASYRSA_REQ_OU "NOMDUSERVICE"
#valeurs à adpater ou laisser par défaut
117 - set_var EASYRSA_ALGO rsa
214 - set_var EASYRSA_DIGEST
==== Création d'une autorité de certification ====
Lors de la création de l'autorité, le système demande une **passphrase** (phrase secrète) qui permet de sécuriser les actions futures (certification des demandes).
On se verra aussi demander le nom de l'autorité (qui sera reconnue par les navigateurs).
./easyrsa build-ca
Deux fichiers ont été créés :
* ca.crt c'est le certificat public de l'AC. C'est ce fichier qu'il faut distribuer aux différents clients. Il se trouve dans le dossier **//pki//**
* ca.key qui est la clé privée de l'AC, présente dans **//pki/private//**
===== Ajout du certificat de l'autorité sur le client =====
L'autorité ainsi créée n'est pas reconnu par les navigateurs.
Il est donc nécessaire d'ajouter le certificat de l'autorité au navigateur pour qu'il puisse l'interroger pour faire valider les certificats des serveurs qu'elle a signé.
**__Procédure__**
* Récupérer le certificat ca.crt de l'AC
* Aller dans les **//paramètres//** du navigateur (la démarche est décrite pour Firefox),
* dans la partie **//vie privée et sécurité//**
* **//afficher les certificats//**
* **//importer le certificat//**
===== Gestion des demandes de certificat authentique =====
Procédure
* Sur la machine à sécuriser (avec [[ssl|SSL]])
* créer la clé privée
* créer la demande CSR
* envoyer le fichier CSR vers l'AC
* sur l'AC
* importer le fichier CSR
* signer le fichier CSR
* retourner le certificat généré vers le serveur à sécuriser
* sur le serveur à sécuriser
* intégrer le certificat authentique dans la configuration du service à sécuriser (Web, FTP ou autre)
==== Création et signature d’une demande de certificat sur le serveur à sécuriser ====
Si ce n'est pas déjà le cas, on crée la clé privée.
//on suppose qu'on part de rien. Si l'environnement est déjà installé, on adaptera les commandes ci-dessous.
apt update
apt install openssl
//pour les certificats
mkdir /etc/ssl/certs
//pour les clés privées
mkdir /etc/ssl/private
cd /etc/ssl/private
//création de la clé privée
openssl genrsa -out
=== création d'une demande CSR ===
openssl req -new -key -out
Après cela il faut copier le fichier **.csr** sur l'**Autorité**
On le fera avec un compte d'accès basique dans le dossier **///tmp//**.
scp @:/
==== Signature d’une CSR sur l'AC ====
**On agit à présent sur l'autorité pour signer la demande et produire le certificat**
On suppose que le fichier de requête est présent dans le dossier /tmp sur l'AC.
cd ~/easy-rsa
//importe la demande sous un nom qui gardera la trace sur l'AC
./easyrsa import-req /tmp/
//signe la demande importée à destination d'un 'server' (pourrait être 'client' ou 'ca')
./easyrsa sign-req server
Il faut **récupérer le fichier .crt** au chemin suivant : **//~/easy-rsa/pki/issued/certif_nomserver.crt//** et le copier sur le serveur à sécuriser dans le dossier qui contient ses certificats.
scp ~/easy-rsa/pki/issued/.crt @:/
Voir ensuite [[https://wiki.inforostand14.net/doku.php?id=ssl#configuration_d_apache_avec_ssl_tls|SSL/TLS]] pour le passage de HTTP vers HTTPS d'un site en prenant en compte ce certificat authentique.
===== Révocation de certificat authentique =====
A la suite d'un événement inattendu (compromission, sortie d'un réseau ou de l'entreprise, etc), les certificats garantis par l'AC ne doivent plus être considérés comme valide.
Il faut donc //**révoquer**// les certificats concernés, puis **//propager//** l'information auprès des machines qui ont enregistré la validité d'un certificat (normalement les clients, mais aujourd'hui les serveurs OCSP utilisent un mécanisme de propagation automatisé).
__**Sur l'AC**__
cd ~/easy-rsa
//révocation
./easyrsa revoke
//génération de la liste des révocation de certificat (Certificates Revocation List - CRL)
./easyrsa gen-crl
La commande //**gen-crl**// crée un fichier **//~/easy-rsa/pki/crl.pem//**.
Celui-ci doit être envoyé à toutes les machines (postes utilisateurs, serveur qui hébergeait le certificat, y compris l'AC) qui faisaient confiance aux certificats révoqués (en **scp** par exemple).
__**sur les machines à mettre à jour**__
On devra importer la liste sur les serveurs devant prendre en compte la nouvelle liste des révocations
openssl crl -in /crl.pem -noout -text