Table des matières

Renouvellement du certificat VPN

Si vous avez des problèmes pour vous connecter au VPN et que vous voyez l'erreur:

snippet.sh
Certificate has key usage  00a0, expects 00a0

dans le fichier /var/log/openvpn-client.log, c'est que votre certificat a probablement expiré.

Pour vérifier sa date d'expiration, en tant que root tapez la commande

snippet.sh
openssl x509 -in /etc/openvpn/keys/user.crt -enddate -noout

qui donne …

snippet.sh
notAfter=Nov 27 13:49:23 2020 GMT

La date affichée après le noAfter est la date d'expiration.

Il y a quatre méthodes possibles pour renouveler le certificat.

1. App Neutrinet

L'application Neutrinet s'occupe de vérifier chaque nuit si les certificats doivent être renouvelés.

Installation

Vous pouvez soit installer l'application via la console d'admin, soit avec:

snippet.sh
yunohost app install neutrinet

Mise à jour

Pour mettre à jour cette application:

snippet.sh
yunohost tools update apps
yunohost app upgrade neutrinet

2. À partir d'une brique

Si l'application Neutrinet est déjà installée, vous pouvez forcer la vérification des certificats:

snippet.sh
/opt/neutrinet/renew_cert/renew_cert.sh

3. Via le script renew_cert

Clônez le dépôt git suivant, sur votre brique internet ou sur votre ordinateur, dans un dossier qui contient les fichiers du VPN à savoir (auth, client.crt, client.key, ca.crt ou credentials, user,crt, user.key et ca-server.crt) :

snippet.sh
git clone https://git.domainepublic.net/Neutrinet/renew_cert

Déplacez-vous dans le dossier qui vient d'être créé:

snippet.sh
cd renew_cert

Créez un environnement virtuel python3. Cela signifie que les paquets python3 qui seront installés n'affecteront pas le reste du système:

snippet.sh
python3 -m venv ve

Activez ensuite cet environnement:

snippet.sh
source ve/bin/activate

Installez les dépendances du script:

pip install -r requirements.txt

Enfin, lancez le script via cette commande:

python renew.py <nom d'utilisateur du VPN Neutrinet>

Il vous sera demandé votre mot de passe pour se connecter au VPN de Neutrinet.

Si tout se passe bien, un sous-dossier nommé certs_YYYY-MM-DD_HH:MM:SS (remplacer les lettres en majuscules par la date et l'heure d'exécution du script) est créé, lequel reprend tous les fichiers de configuration nécessaires au client OpenVPN.

Les fichiers qui nous intéressent sont client.crt, client.key et ca.crt, c'est-à-dire la clé publique et la clé privée du certificat client, ainsi que la clé publique du certificat serveur.

Ces fichiers doivent remplacer ceux situés dans /etc/openvpn (cela peut changer en fonction de l'OS). Sur la brique internet, ces fichiers se trouvent dans /etc/openvpn/keys

Remarque: Avant de remplacer l'un par l'autre, il est conseillé de faire une copie des anciens certificats, juste au cas où. Par exemple, via les commandes suivantes (toujours depuis le dossier renew_cert):

snippet.sh
sudo mv /etc/openvpn/keys/user.crt{,.backup}
sudo mv /etc/openvpn/keys/user.key{,.backup}
sudo mv /etc/openvpn/keys/ca-server.crt{,.backup}
sudo mv client.crt /etc/openvpn/keys/user.crt
sudo mv client.key /etc/openvpn/keys/user.key
sudo mv ca.crt /etc/openvpn/keys/ca-server.crt

Il ne reste plus qu'à redémarrer le service OpenVPN pour voir s'il fonctionne toujours.

Remarque: Idéalement, assurez-vous d'être connecté à la brique internet en réseau local, c'est-à-dire via son adresse locale (192.168.1.x dans la plupart des cas).

snippet.sh
sudo systemctl restart ynh-vpnclient

Vous pouvez vérifier que tout est correct dans les logs du client VPN:

tail /var/log/openvpn-client.log /var/log/ynh-vpnclient.log

4. Via le site user.neutrinet.be

Cette méthode demande parfois de la patience car user.neutrinet.be peut connaître des ratés.

Connectez-vous en ssh à votre brique internet, puis allez dans le dossier où se trouve la clé du VPN (il s'agit normalement du fichier /etc/openvpn/keys/user.key):

snippet.sh
cd /etc/openvpn/keys

Créez une demande de signature de clés (CSR) pour cette clé:

snippet.sh
openssl req -out client.csr -new -newkey rsa:4096 -nodes -keyout user.key

Plusieurs questions vous seront posées, comme le code pays (BE), la région (Bruxelles, …), la Société etc… auquel le certificat est attaché. Le plus important est le Cname, qui est le nom qui sera utilisé par Neutrinet pour savoir à qui appartient le certificat.

Remarque: Il est recommandé de mettre votre adresse e-mail pour le Cname.

Cette commande crée un fichier client.csr, qui contient la demande de signature. Vous pouvez afficher son contenu avec:

snippet.sh
cat client.csr

Copiez ce contenu, et rendez-vous sur https://user.neutrinet.be

Connectez-vous

Cliquez sur Users

Attendez que cela charge, et quand vous voyez votre nom, cliquez dessus

Cliquez sur View associated clients

Cliquez sur votre certificat (si vous en avez plusieurs, il faut utiliser celui avec une IPv4 - 80.67.181.x)

Choisissez l'option Renew certificate

Le certificat actuel s'affiche alors à l'écran. Cliquez sur Rekey, puis collez le contenu du CSR (le fichier que vous aviez copié plus tôt).

Cliquez sur le bouton Rekey pour confirmer.

Une fois cette opération terminée, vous verrez le bandeau suivant:

Vous pouvez alors cliquer sur View client details, puis sur Download config package.

Cela va télécharger un fichier zip qui contient les fichiers de certificat. Dans le dossier /etc/openvpn/keys de votre brique internet, copiez le fichier client.crt vers /etc/openvpn/keys/user.crt.

Voilà, c'est tout!