====== 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** |