# Renouvellement du certificat VPN Si vous avez des problèmes pour vous connecter au VPN et que vous voyez l'erreur: ```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 ```sh openssl x509 -in /etc/openvpn/keys/user.crt -enddate -noout ``` qui donne ... ```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'[[fr:cube:apps-neutrinet|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: ```sh yunohost app install neutrinet ``` Un message en rouge s'affiche alors : ''DANGER! This app is known to be still experimental (if not explicitly not working)! You should probably NOT install it unless you know what you are doing. NO SUPPORT will be provided if this app doesn't work or breaks your system… If you are willing to take that risk anyway, type 'Yes, I understand':'' Soyez courageux mais raisonnable. ;-) ### Mise à jour Pour mettre à jour cette application: ```sh yunohost tools update --apps yunohost tools upgrade --apps neutrinet ``` ## 2. À partir d'une brique __Si l'application Neutrinet est déjà installée__, vous pouvez forcer la vérification des certificats: ```sh cd /opt/neutrinet/renew_cert ./renew_cert_cron.sh -v ``` ## 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 *(aut, client.crt, client.key, ca.crt **ou** credentials, user,crt, user.key et ca-server.crt)* : ```sh git clone https://git.domainepublic.net/Neutrinet/renew_cert ``` Déplacez-vous dans le dossier qui vient d'être créé: ```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: ```sh python3 -m venv ve ``` Activez ensuite cet environnement: ```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 ``` Il vous sera demandé votre mot de passe pour se connecter au VPN de Neutrinet. Si tout se passe bien, un sous-dosser 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` et `client.key`, c'est-à-dire la clé publique et la clé privée du certificat. 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`): ```sh sudo mv /etc/openvpn/keys/user.crt{,.backup} sudo mv /etc/openvpn/keys/user.key{,.backup} sudo mv client.crt /etc/openvpn/keys/user.crt sudo mv client.key /etc/openvpn/keys/user.key ``` 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). ```sh sudo systemctl restart openvpn ``` Pour vérifier que vous êtes connecté derrière le VPN, vous pouvez lancer la commande: ```sh ip addr ``` Normalement, l'interface `tun0` devra apparaître dans la liste. ## 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`): ```sh cd /etc/openvpn/keys ``` Créez une demande de signature de clés (CSR) pour cette clé: ```sh openssl req -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: ```sh cat client.csr ``` Copiez ce contenu, et rendez-vous sur https://user.neutrinet.be {{ :fr:vpn:renew_cert-01-login.png?direct&600 |}} Connectez-vous {{ :fr:vpn:renew_cert-02-dashboard.png?direct&600 |}} Cliquez sur `Users` {{ :fr:vpn:renew_cert-03-users.png?direct&600 |}} Attendez que cela charge, et quand vous voyez votre nom, cliquez dessus {{ :fr:vpn:renew_cert-04-user.png?direct&600 |}} Cliquez sur `View associated clients` {{ :fr:vpn:renew_cert-05-clients.png?direct&600 |}} Cliquez sur votre certificat (si vous en avez plusieurs, il faut utiliser celui avec une IPv4 - 80.67.181.x) {{ :fr:vpn:renew_cert-06-client.png?direct&600 |}} Choisissez l'option `Renew certificate` {{ :fr:vpn:renew_cert-07-certificate.png?direct&600 |}} 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: {{ :fr:vpn:renew_cert-08-rekey.png?direct&600 |}} 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!