Problème révocation clefs OpenVPN (crl-verify)

Bonjour,

Je dispose d’un serveur OpenVPN 2 qui tourne sur une Debian Squeeze qui lui ne pose pas de problème de configuration.
Récemment j’ai eu besoin de révoquer des certificats, la révocation se passe bien, un fichier crl.pem est généré et je le copie dans le dossier /etc/openvpn
Ensuite je met à jour le server.conf avec la ligne
crl-verify crl.pem (note j’ai aussi essayé /etc/openvpn/crl.pem)

C’est là que ça coince, une fois la config mise à jour je redémarre le serveur et là Bam plus rien, plus d’interfaces tun0, le serveur refuse de redémarrer.

Je vais quand même faire un tour dans les logs par acquis de conscience et là je trouve ceci entre autre comme ligne :

Sun Dec  2 09:57:19 2012 us=776680 81.164.x.x:52548 CRL: cannot read: /etc/openvpn/crl.pem: No such file or directory (errno=2)

81.164.x.x c’est l’ip du client qui tente de se connecter au serveur, bizarre pour un serveur qui ne démarre même pas côté serveur.

J’ai aussi modifié les droits du crl.pem en 755 alors que bon 644 par défaut me semblait suffisant.

Dés que je commente la ligne # crl-verify crl.pem le serveur openvpn refonctionne à nouveau mais du coup (normal) sans vérifier si des certificats ont été révoqués.

J’ai déjà fait pas mal de recherches mais je ne trouve toujours pas pourquoi il “ne trouve pas” ce fichu fichier crl.pem
J’ai vérifié avec un petit coup de openssl crl -in crl.pem -text et le fichier crl.pem contient bien les certificats révoqués.

D’avance merci pour les pistes que vous me donnerais.

Une hypothèse:

Le répertoire /etc/openvpn a-t-il des droits en 755 ou est-il accessible de l’utilisateur qui execute le serveur VPN (directive user et group dans ton fichier de conf)

Bonjour,

Merci pour réponse, malheureusement ce n’est pas ça. CHMOD 755

drwxr-xr-x   7 root     root     4096  2 déc 11:03 openvpn

Dans la directive user et group c’est openvpn, un user openvpn et un groupe openvpn a bien été créé sur le serveur.

Aucune idée d’où cela peut venir, en simple utilisateur, j’arrive à rentrer dans le dossier openvpn et à faire un cat /etc/openvpn/crl.pem sans problème.

Par acquis de conscience j’ai mis temporairement l’user root et le group root dans le fichier server.conf
Ca n’a rien changé.
Toujours cette fameuse ligne :

CRL: cannot read: crl.pem: No such file or directory (errno=2)

Bon, alors essaye de tracer le serveur vpn en cherchant quel fichier il cherche à ouvrir.

à éxécuter avec les droits requis (en root si tu veux)

il n’y aurait pas un truc pour lancer strace juste après openvpn ?
Car j’ai tout juste le temps de faire un ps aux | grep openvpn pour récupérer le pid ensuite quand je lance strace c’est déjà trop tard le service est déjà arrêté, car openvpn tente de démarrer mais ensuite s’arrête. Et donc ne trouve plus le pid.

essayer avec

Comme l’a écrit difix, tu lances le strace tranquillement après via
strace -p «pid du processus»
que tu récupères via ps ax…

Merci pour votre aide,

Voici le contenu des fichiers générés dans /tmp, comment les interpréter et comment régler le problème.

root@MiniPC:/tmp# cat openvpn.159*
open("crl.pem", O_RDONLY|O_LARGEFILE)   = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 12:44:58 2012 us=5032"..., 119) = 119
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 12:44:58 2012 us=5035"..., 64) = 64
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 12:44:58 2012 us=5038"..., 108) = 108
--- SIGCHLD (Child exited) @ 0 (0) ---
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 12:44:58 2012 us=5053"..., 133) = 133
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 12:44:58 2012 us=5056"..., 82) = 82
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 12:44:58 2012 us=5059"..., 84) = 84
--- SIGCHLD (Child exited) @ 0 (0) ---
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 12:44:58 2012 us=5074"..., 117) = 117
close(5)

Et la commande en elle même renvoi ça :

root@MiniPC:/etc/openvpn# strace -p `pidof openvpn` -o /tmp/openvpn -ff -e trace=open,close,read,write
Process 15942 attached - interrupt to quit
Process 15952 attached
Process 15942 suspended
Process 15942 resumed
Process 15952 detached
Process 15953 attached
Process 15942 suspended
Process 15942 resumed
Process 15953 detached
Process 15942 detached

Bien, donc il ne fait pas un open("/etc/openvpn/crl.pem") mais un open(“crl.pem”), il faut donc démarrer openvpn en étant dans le répertoire /etc/openvpn.

Je suggère donc de rajouter
cd /etc/openvpn
dans le script de démarrage de openvpn par exemple juste après le «#!/bin/sh -e»:

#!/bin/sh -e cd /etc/openvpn ...
Ça devrait marcher.

je vais essayer, mais comment se fait-il que même lorsque je met des chemins complets
crl-verify /etc/openvpn/crl.pem
ça ne marche pas.

Et pourquoi il trouve sans problème les clés serveur qui sont simplement mis en
ca ca.crt
cert server.crt

Mais je vais essayer et je vous tiens au courant.

Ca ne va pas mieux, maintenant j’ai ça

root@MiniPC:/home# cat /tmp/openvpn.228*
read(5, "E\0\0OU\272@\0@\6\22\27\300\250\10\36\n\10\0\n\1\275\21\3\350\303\364/\207\332\37\17"..., 1500) = 79
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:38 2012 us=5832"..., 71) = 71
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:38 2012 us=5837"..., 60) = 60
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:38 2012 us=5841"..., 63) = 63
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:38 2012 us=5849"..., 99) = 99
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:38 2012 us=5853"..., 106) = 106
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:38 2012 us=5857"..., 213) = 213
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:38 2012 us=5861"..., 223) = 223
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:38 2012 us=5865"..., 75) = 75
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:38 2012 us=5868"..., 85) = 85
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:38 2012 us=5872"..., 97) = 97
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:38 2012 us=5876"..., 68) = 68
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:38 2012 us=5880"..., 91) = 91
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:39 2012 us=4677"..., 134) = 134
open("crl.pem", O_RDONLY|O_LARGEFILE)   = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:42 2012 us=6806"..., 119) = 119
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:42 2012 us=6809"..., 64) = 64
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:42 2012 us=6813"..., 108) = 108
--- SIGCHLD (Child exited) @ 0 (0) ---
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:42 2012 us=6827"..., 133) = 133
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:42 2012 us=6831"..., 82) = 82
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:42 2012 us=6834"..., 84) = 84
--- SIGCHLD (Child exited) @ 0 (0) ---
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 15:30:42 2012 us=6847"..., 117) = 117
close(5)

J’ai vérifié et le fichier /etc/localtime n’est qu’en lecture seule, mais est ce prudent d’autoriser l’écriture ? (même au groupe openvpn)
On retrouve ci dessus qu’une seule ligne avec crl.pem par rapport à avant.

Je vais qd même tester en donnant les droits en écriture au groupe openvpn pour le fichier /etc/localtime

je viens de faire quelque chose de pas très prudent, mettre les fichiers crl.pem et /etc/localtime en chmod 777 mais ça ne change rien.

root@MiniPC:/home# cat /tmp/openvpn.241*
open("crl.pem", O_RDONLY|O_LARGEFILE)   = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 16:02:06 2012 us=1454"..., 119) = 119
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 16:02:06 2012 us=1457"..., 64) = 64
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 16:02:06 2012 us=1460"..., 108) = 108
--- SIGCHLD (Child exited) @ 0 (0) ---
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 16:02:06 2012 us=1474"..., 133) = 133
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 16:02:06 2012 us=1478"..., 82) = 82
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 16:02:06 2012 us=1481"..., 84) = 84
--- SIGCHLD (Child exited) @ 0 (0) ---
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
write(1, "Thu Dec  6 16:02:06 2012 us=1494"..., 117) = 117
close(5)

Non, ça n’est pas ça, la ligne

[quote]open(“crl.pem”, O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)[/quote]montre qu’il ne trouve pas le fichier crl.pem. Il s’agit de voir dans quel repertoire il est. Essaye de faire

Ca donne ça :

root@MiniPC:/etc/openvpn# cat /tmp/openvpn.9*
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/openvpn/crl.pem", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
--- SIGCHLD (Child exited) @ 0 (0) ---
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
--- SIGCHLD (Child exited) @ 0 (0) ---
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)

Pour info l’erreur avec /etc/localtime ne pose pas de problème car elle est présente également lorsque le serveur démarre comme il faut et que je commente la ligne crl-verify
C’est uniquement l’erreur crl.pem qui pose problème.

Tu fais bien ce strace sur le serveur??

[quote]open("/etc/openvpn/crl.pem", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)[/quote]Là ça devient vraiment surprenant. Vérifie que en tant que user openvpn, sur le serveur donc, tu peux ouvrir ce fichier par un

alors, oui je fais bien ça sur le serveur.
après un

su openvpn

oui j’arrive à ouvrir le fichier /etc/openvpn/crl.pem
bizarre !!!

Bon, utilises tu un chroot? Si oui, l’utilisateur openvpn peut il aller dans ce répertoire?

Bref: si il y a un «/etc/openvpb/chroot», met les accès genre à 755 pour voir.
Si ça n’est pas ça, essaye de voir lorsque openvpn tourne en root (met root à la place de openvpn dans user et group). Ça permettra de voir si c’est ça.

oui j’utilise un chroot
le dossier est déjà en 755.
J’avais déjà essayé en mettant user root et group root mais ça n’allait déjà pas, je viens de réessayer et c’est pareil.
voici les résultats du strace,
plus bas je met mon server.conf

root@MiniPC:/etc/openvpn# cat /tmp/openvpn.18*
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/openvpn/crl.pem", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
--- SIGCHLD (Child exited) @ 0 (0) ---
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)
--- SIGCHLD (Child exited) @ 0 (0) ---
open("/etc/localtime", O_RDONLY)        = -1 ENOENT (No such file or directory)

server.conf

# Serveur TCP/443 - je change en 1194
mode server
proto tcp
port 1194
dev tun

# Cles et certificats
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
tls-auth ta.key 0
cipher AES-256-CBC

# Reseau
server 10.8.0.0 255.255.255.0
#je n'utilise plus ça, si besoin de rediriger la connexion, j'utilise alors le proxy dans le tunnel openvpn
#push "redirect-gateway def1 bypass-dhcp"
#push "dhcp-option DNS 4.4.4.4"
#push "dhcp-option DNS 8.8.8.8"
push "route 192.168.8.0 255.255.255.0"
push "route 10.8.0.0 255.255.255.0"
keepalive 10 120
client-to-client

# Securite
user openvpn
group openvpn
chroot /etc/openvpn/jail
persist-key
persist-tun
comp-lzo
crl-verify /etc/openvpn/crl.pem #pose problème qd décommenté

# Log
verb 4
mute 20
status openvpn-status.log
log-append /var/log/openvpn.log

Bon !
Comme tous les gros problèmes il se résout avec de petites solutions…
Si il y a un chroot, le crl-verify doit renvoyer vers un fichier se trouvant dedans ou un lien symbolique, ici je l’ai copié dans le dossier /etc/openvpn/jail/crl.pem

J’espère que ce post servira à d’autres, car il est vrai que lorsque j’ai cherché sur le net mon problème je suis tombé sur des posts sans réponses ou sans solutions.

Je dois juste encore tester si le blacklist des clefs est bien prise en compte avant de mettre le post en résolu.

Merci à ceux qui m’ont aiguillés dans la résolution de ce problème.

Problème RÉSOLU !!!