OpenVPN : « CRL has expired »

Je maintiens un VPN sous Debian via OpenVPN qui à cessé de fonctionner la semaine dernière. Petit retour sur sa remise en fonctionnement.

padlock photo

Un utilisateur de mon réseau VPN m’a signalé qu’il n’arrivait plus à y accéder. Aucun message significatif ne s’affichait dans sa console.

Après une brève analyse du fichier de journalisation /var/log/syslog sur mon serveur, je tombe sur ces lignes :

TCP connection established with [AF_INET]XXX.XXX.XXX.XXX:51900
XXX.XXX.XXX.XXX:51900 VERIFY ERROR: depth=0, error=CRL has expired: C=FR, ST=FR, L=Versailles, O=foo.bar, CN=SoX, emailAddress=hostmaster@foo.bar
XXX.XXX.XXX.XXX:51900 OpenSSL: error:14089086:SSL routines:ssl3_get_client_certificate:certificate verify failed
XXX.XXX.XXX.XXX:51900 TLS_ERROR: BIO read tls_read_plaintext error
XXX.XXX.XXX.XXX:51900 TLS Error: TLS object -> incoming plaintext read error
XXX.XXX.XXX.XXX:51900 TLS Error: TLS handshake failed
XXX.XXX.XXX.XXX:51900 Fatal TLS error (check_tls_errors_co), restarting

L’info qui nous intéresse ici est error=CRL has expired.

Wikipedia nous explique que CRL c’est pour certificate revocation list ou liste de révocation de certificats. OK donc cette liste peut expirer et cela devient problématique.

Pour en savoir plus,  je décide d’afficher le contenu du certificat en question via la commande openssl crl -in crl.pem -text :

Certificate Revocation List (CRL):
 Version 1 (0x0)
 Signature Algorithm: sha256WithRSAEncryption
 Issuer: /C=FR/ST=FR/L=Versailles/O=foo.bar/CN=foo.bar CA/emailAddress=hostmaster@foo.bar
 Last Update: Sep 27 15:08:34 2017 GMT
 Next Update: Oct 27 15:08:34 2017 GMT
No Revoked Certificates.
[...]

Cette liste indiquait donc que 30 jours après sa création, elle devait recevoir une mise à jour (Next Update).

Et en lisant un ticket reporté auprès de Debian, on apprend que la version 2.4 du client d’OpenVPN n’autorise plus les connexions clientes dont la date Next Update de la CRL est dans le passée.

En regardant le fichier de configuration openssl.cnf dans le dossier d’OpenVPN sur mon serveur, il y est effectivement inscrit :

default_crl_days= 30 # how long before next CRL

Tout cela est donc cohérent.

Histoire de ne pas avoir à faire une intervention tous les mois, je change la valeur 30 en 3650 pour être synchrone avec la durée de vie des autres certificats.

Il ne reste plus qu’à regénérer la CRL via la commande :

. ./vars && KEY_CN='' KEY_OU='' KEY_NAME='' KEY_ALTNAMES='' openssl ca -gencrl -keyfile ca.key -cert ca.crt -out crl.pem -config openssl.cnf

Et le tour est joué. On vérifie ?

Certificate Revocation List (CRL):
 Version 1 (0x0)
 Signature Algorithm: sha256WithRSAEncryption
 Issuer: /C=FR/ST=FR/L=Versailles/O=foo.bar/CN=foo.bar CA/emailAddress=hostmaster@foo.bar
 Last Update: Nov 8 11:04:53 2017 GMT
 Next Update: Nov 6 11:04:53 2027 GMT
No Revoked Certificates.

Yep ! On est tranquille pour 10 ans 🙂


Sources :

4 réponses sur “OpenVPN : « CRL has expired »”

  1. Un immense merci. Tu viens de me faire économiser des jours de galères… Vraiment, je sais le temps que ça prend d’écrire des articles. Mais prendre de son temps pour en faire gagner (autant !) aux autres…. C’est vraiment cool 🙂

  2. Bonjour,
    je voulais vous remercier d’avoir écrit cette documentation qui m’a permis de résoudre ce problème extremement bloquant.
    Merci beaucoup et bonne continuation.
    Raphaël

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.