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 - easy-rsa/stable 3.1.0-1 all dans bookworm
CA racine
Sur une machine à part (pas russule), 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 :set_var EASYRSA_DIGEST "sha512" set_var EASYRSA_ALGO ec set_var EASYRSA_CURVE secp521r1 set_var EASYRSA_CA_EXPIRE 36500 set_var EASYRSA_CERT_EXPIRE 36500 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"
- Créer la paire de clé du CA racine, en utilisant un mot de passe dédié :
./easyrsa init-pki ./easyrsa build-ca # Common Name: CA Racine
À 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 (russule, lxc openvpn).
- Initialiser un dossier avec easy-rsa :
make-cadir /etc/easy-rsa - Aller dans ce dossier pour la suite des opérations :
cd /etc/easy-rsa - Modifier la configuration de
./vars, afin d'avoir :set_var EASYRSA_DIGEST "sha512" set_var EASYRSA_ALGO ec set_var EASYRSA_CURVE secp521r1 set_var EASYRSA_CA_EXPIRE 36500 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"
- Créer la paire de clé du CA racine, en utilisant un mot de passe dédié :
./easyrsa init-pki ./easyrsa build-ca subca # Common Name: 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/easy-rsa/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 ./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/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/pki/ca.crt >> /etc/easy-rsa/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/easy-rsa/pki scp root@server-ca-racine:/etc/easy-rsa/pki/issued/ca-intermediaire.crt . mv ca-intermediaire.crt ca.crt
Serveur
Création des clés serveur
cd /etc/easy-rsa ./easyrsa gen-req russule nopass ./easyrsa sign-req server 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/crypto cp /etc/easy-rsa/pki/ca.crt . cp /etc/easy-rsa/pki/private/russule.key server.key cp /etc/easy-rsa/pki/issued/russule.crt server.crt
Client
il y a maintenant un script pour réaliser le client, suivre :
https://mycelium-fai.org/wiki/documentation/technique/client-vpn/start
Création de la paire de clé
Sur le poste client, en imaginant qu'il est sous Debian avec easy-rsa >=3 d'installé, ce qui est dans le cas dans bookworm :
- 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/easy-rsa ./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/easy-rsa/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 |
russule.crt | Serveur seulement | Certificat serveur | Non |
russule.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 |
