Table des matières
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'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 |