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".
openssl s_client -connect host:port -showcerts
et comparez l'empreinte du certificat reçu avecopenssl x509 -noout -text -in ca.crt
.Réponses:
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.)
la source