====== Easy-RSA pour OpenVPN ======
Easy-RSA est un utilitaire en ligne de commande pour faciliter la génération et la signature de clés pour OpenVPN.
La documentation sur laquelle nous nous basons est celle d'[[https://wiki.archlinux.org/index.php/Easy-RSA|Archlinux]].
===== Pré-requis =====
* easy-rsa >= 3
Vu les dépendances, sous Debian Stretch, on peut directement aller télécharger le paquet en Debian Testing :
* télécharger le .deb sur https://packages.debian.org/buster/all/easy-rsa/download en cliquant par exemple sur **ftp.fr.debian.org/debian**
* l'installer, soit avec ou outil graphique (ex. gdebi), soit en ligne de commande avec : ''dpkg -i easy-rsa_xxx_all.deb''
===== CA racine =====
Sur une machine à part (pas schizophylle), on va mettre en place le CA racine qui signera les autres certificats.
==== Création du CA racine ====
- Initialiser un dossier avec easy-rsa : ''make-cadir ./root-ca''
- Aller dans ce dossier pour la suite des opérations : ''cd ./root-ca''
- Modifier la configuration de ''./vars'', afin d'avoir les informations de l'organisation dans le certificat (''mode=org'') et une taille de 4096 :
set_var EASYRSA_DN "org"
set_var EASYRSA_REQ_COUNTRY "FR"
set_var EASYRSA_REQ_PROVINCE "ChNord"
set_var EASYRSA_REQ_CITY "Lille"
set_var EASYRSA_REQ_ORG "Mycelium FAI"
set_var EASYRSA_REQ_EMAIL "contact@mycelium-fai.org"
set_var EASYRSA_REQ_OU "Mycelium Security Department"
set_var EASYRSA_KEY_SIZE 4096
- Créer la paire de clé du CA racine, en utilisant un mot de passe dédié :
./easyrsa init-pki
./easyrsa build-ca
À la commande ''./easyrsa build-ca'', le **Common Name** est demandé, mettre **CA Racine**.
=== Point sécurité ===
Le fichier le plus important à mettre dans le coffre fort est le fichier ''/etc/easyrsa/pki/private/ca.key'' ainsi que son mot de passe. Cette clé doit être utiliser uniquement pour la signature des certificats CA intermédiaires.
==== Création du CA intermédiaire ====
Cette procédure est à faire sur le serveur VPN (schizophylle), créer la paire de clé du CA intémédiaire.
Modifier le fichier ''/etc/easyrsa/vars''. Dé-commenter et modifier les lignes suivantes.
set_var EASYRSA_REQ_COUNTRY "FR"
set_var EASYRSA_REQ_PROVINCE "Ch'Nord"
set_var EASYRSA_REQ_CITY "Lille"
set_var EASYRSA_REQ_ORG "Mycelium FAI"
set_var EASYRSA_REQ_EMAIL "contact@mycelium-fai.org"
set_var EASYRSA_REQ_OU "VPN"
Maintenant, créer la clé privée du certificat CA intermédiaire. Utiliser le mot de passe dédié à ce certificat.
cd /etc/easyrsa
export EASYRSA=$(pwd)
easyrsa init-pki
easyrsa build-ca subca
A la commande ''easyrsa build-ca subca'' le **Common Name** est demandé, mettre **Mycelium FAI - CA Intermediaire**.
==== Signer la demande du CA intermédiaire au CA racine ====
A la génération précédente, un fichier ''/etc/easyrsa/pki/reqs/ca.req'' a été créé. Il faut envoyer ce fichier dans le répertoire ''/tmp'' du serveur où il y a le **CA racine**.
Exemple:
scp /etc/easyrsa/pki/reqs/ca.req root@server-ca-racine:/tmp/ca-intermediaire.req
==== Signature du CA intermédiaire ====
Se connecter sur le serveur où se trouve le CA racine et signer la demande du CA intermédiaire.
**Importation**
cd /etc/easy-rsa-ca-root
export EASYRSA=$(pwd)
easyrsa import-req /tmp/ca-intermediaire.req ca-intermediaire
rm /tmp/ca-intermediaire.req
**Signature**
easyrsa sign-req ca ca-intermediaire
Une fois indiquée **yes** pour confirmer, le certificat CA intermédiaire est disponible ''/etc/easy-rsa-ca-root/pki/issued/ca-intermediaire.crt''
. Ce fichier est public est sera utilisé pour la connexion VPN du serveur et des clients.
**Chainage des deux certificats CA**
Pour le bon fonctionnement des connexions il faut chainer les deux certificats CA (racine et intermédiaire)
cat /etc/easy-rsa-ca-root/pki/ca.crt >> /etc/easy-rsa-ca-root/pki/issued/ca-intermediaire.crt
==== Copie du certificat CA intermédiaire sur le serveur ====
Depuis le serveur VPN récupérer le fichier ''ca-intermediaire.crt''
cd /etc/easyrsa/pki
scp root@server-ca-racine:/etc/easy-rsa-ca-root/pki/issued/ca-intermediaire.crt .
mv ca-intermediaire.crt ca.crt
===== Serveur =====
==== Création des clés serveur ====
root@russule:# su -l certifications
certifications@russule:$ cd openvpn
certifications@russule:$ easyrsa gen-req russule nopass
certifications@russule:$ easyrsa sign-req server russule
certifications@russule:$ easyrsa show-cert russule full
Une fois indiquée **yes** pour confirmer, le certificat serveur est disponible.
Ce fichier est public est sera utilisé pour la connexion VPN du serveur.
**Installation des certificats serveur**
cd /etc/openvpn/server
cp /home/certifications/openvpn/pki/ca.crt .
cp /home/certifications/openvpn/pki/private/schizophylle.key .
cp /home/certifications/openvpn/pki/issued/schizophylle.crt .
===== Client =====
==== Création de la paire de clé ====
Sur le poste client, en imaginant qu'il est sous Debian avec easy-rsa >=3 d'installé :
- Lancer un terminal, en tant qu'un utilisateur, et aller dans un dossier prévu pour
- Initialiser le dossier qui contiendra les certificats, avec easy-rsa : ''make-cadir ./mycelium-ca''
- Aller dans ce dossier pour la suite des opérations : ''cd ./mycelium-ca''
- Créer la paire de clé pour le client, en remplaçant //adherent1// par le nom du client :
./easyrsa init-pki
./easyrsa gen-req adherent1 nopass
==== Signature de la demande ====
A la génération précédente, un fichier ''pki/reqs/adherent1.req'' a été créé. Il faut envoyer ce fichier dans le répertoire ''/tmp'' du serveur VPN. Par exemple :
scp pki/reqs/adherent1.req root@server-vpn:/tmp/adherent1.req
Se connecter ensuite sur le serveur où se trouve le CA intermédiaire.
**Importation**
cd /etc/easyrsa
export EASYRSA=$(pwd)
easyrsa import-req /tmp/adherent1.req adherent1
rm /tmp/adherent1.req
**Signature**
easyrsa sign-req client adherent1
easyrsa show-cert adherent1 full
Une fois indiquée **yes** pour confirmer, le certificat client est disponible ''/etc/easyrsa/pki/issued/adherent1.crt''
. Ce fichier est public est sera utilisé pour la connexion VPN du client.
==== Copie du certificat pour le client ====
Depuis le client VPN récupérer le fichier ''adherent1.crt''
cd /etc/openvpn/client
scp root@server-vpn:/etc/easyrsa/pki/issued/adherent1.crt .
scp root@server-vpn:/etc/easyrsa/pki/ca.crt .
cp /etc/easyrsa/pki/private/adherent1.key .
En fonctions des droits sur le server-vpn, vous pourriez avoir besoin de deplacer en 2 coups :
# cp /etc/easyrsa/pki/issued/adherent1.crt /home/adherent1/
# chown adherent1 /home/adherent1/adherent1.crt
===== Les clés =====
^ Nom de fichier ^ Utile à ^ Utilité ^ Secret ? ^
| ''ca.crt'' | Serveur et tous les clients | Certificat CA intermédiaire | **Non** |
| ''ca.key'' | Clé signant la machine seulement | Clé privée CA intermédiaire | **Oui** |
| ''dh{n}.pem'' | Serveur seulement | Paramètres Diffie Hellman | **Non** |
| ''ta.key'' | Serveur et tous les clients | Paramètres Handshake TLS | **Non** |
| ''schizophylle.crt'' | Serveur seulement | Certificat serveur | **Non** |
| ''schizophylle.key'' | Serveur seulement | Clé serveur | **Oui** |
| ''adherent1.crt'' | Client adhérent1 seulement | Certificat Client adhérent1 | **Non** |
| ''adherent1.key'' | Client adhérent1 seulement | Clé Client adhérent1 | **Oui** |