OpenVPN: certificat auto-signé dans la chaîne

9

J'essaie sans succès d'utiliser TunnelBlick(un client OS / X OpenVPN 2.2.1 qui est bien connu) pour se connecter à l'aide de certificats. Voici le message d'erreur (nettoyé) que je reçois:

11-01-2012 11:18:26 TLS: paquet initial de **. **. **. **: 1194, sid = 17a4a801 5012e004
11-01-2012 11:18:26 VERIFIER ERREUR: profondeur = 1, erreur = certificat auto-signé dans la chaîne de certificats: / C = US / ST = ** / L = ** / O = ** / CN = ** / emailAddress = **
2012-01-11 11:18:26 TLS_ERROR: BIO read tls_read_plaintext erreur: erreur: 14090086: routines SSL: SSL3_GET_SERVER_CERTIFICATE: échec de la vérification du certificat
11-01-2012 11:18:26 Erreur TLS: objet TLS -> erreur de lecture de texte en clair entrant
11-01-2012 11:18:26 Erreur TLS: échec de la négociation TLS
11-01-2012 11:18:26 TCP / UDP: fermeture du socket

Maintenant, voici le hic. J'ai généré moi-même un CSR pour demander ce certificat, en utilisant le fichier ca.crt qui m'a été fourni par l'autre côté (en fait, ils l'ont fait deux fois juste pour s'assurer).

Les entrées pertinentes dans la configuration client sont:

ca   ca.crt
cert my.crt
key  my.key

et, en plus ... je peux vérifier les clés de cette façon:

openssl vérifier -CAfile ca.crt my.crt 
my.crt: OK

D'accord, maintenant je suis complètement mystifié et perplexe. À ce stade, je sais que la CSR et la clé ont été générées à l'aide de la CSR appropriée. En fait, voici la commande même qui l'a fait:

openssl req -newkey rsa:2048 -new -out my.csr -keyout my.key

Je savais aussi faire ça:

openssl x509 -subject -issuer -noout -in ca.crt

...

(cligner!)

Je viens de le trouver ?

La sortie de cette commande ressemble à ceci: (édité quelque peu)

sujet = / C = US / ST = VA / L = ** / O = ** / CN = ** CA / emailAddress = **
émetteur = (le même)

alors que dans le message d'erreur d'OpenVPN, le ST = n'est pas exactement le même:

VERIFIER ERREUR: profondeur = 1, erreur = certificat auto-signé dans la chaîne de certificats: / C = US / ST = Virginia / L = ** / O = ** / CN = ** / emailAddress = **

"VA" n'est pas exactement égal à "Virginia".

user106701
la source
2
Essayez un openssl s_client -connect host:port -showcertset comparez l'empreinte du certificat reçu avec openssl x509 -noout -text -in ca.crt.
Shane Madden

Réponses:

7

Juste pour apporter la fermeture complète à ce fil: c'était bien le problème. Le "ca.crt" que j'avais reçu ("Virginia") n'était PAS en fait celui que mon collègue utilisait ("VA"), et aucun de nous n'a remarqué à l'époque.

Donc ... fondamentalement (et en termes simples), VPN essayait de gravir les échelons de l'autorité à la recherche du certificat qu'il s'attendait à trouver, mais il ne l'a jamais fait (car il n'était pas là).

Et, c'est l'un de ces merveilleux messages pour lesquels les systèmes de cryptographie sont si connus: entièrement précis, et pourtant, complètement mystérieux pour les non-initiés. (Et, pour être honnête, les systèmes de cryptographie n'aiment pas divulguer d'informations sur quoi que ce soit, car ils supposent que la personne à qui ils parlent est sûrement la mauvaise Eve , pas gentille Alice ou Bob.)

Mike Robinson
la source
Pour être honnête, je ne suis pas convaincu que cela ait quoi que ce soit à voir avec la chaîne de l'autorité de certification et plus à voir avec le fait qu'il s'agissait en premier lieu d'une autorité de certification différente, et donc automatiquement non fiable. OpenSSL n'a pas besoin de marcher beaucoup. C'est peut-être ce que vous vouliez dire.
gparent