J'essaie de vérifier une connexion SSL à Experian dans Ubuntu 10.10 avec le client OpenSSL.
openssl s_client -CApath /etc/ssl/certs/ -connect dm1.experian.com:443
Le problème est que la connexion se ferme avec un code de retour Verify: 21 (impossible de vérifier le premier certificat).
J'ai vérifié la liste des certificats et le certificat utilisé pour signer Experian (serveur sécurisé CA-G3 de VeriSign classe 3) est inclus dans la liste.
/etc/ssl/certs/ca-certificates.crt
Pourtant, je ne sais pas pourquoi il n'est pas en mesure de vérifier le premier certificat. Merci d'avance.
La réponse complète est visible ici: https://Gist.github.com/124879
Le premier message d'erreur vous en dit plus sur le problème:
erreur de vérification: num = 20: impossible d'obtenir le certificat de l'émetteur local
L’autorité de certification émettrice du certificat de serveur d’entité finale est
VeriSign Classe 3 Secure Server CA - G3
Examinez attentivement le fichier de votre autorité de certification. Vous trouverez pas ce certificat, car il s'agit d'une autorité de certification intermédiaire. Ce que vous avez trouvé est nommé-équivalent G3 Public primaire de VeriSign.
Mais pourquoi l'autre connexion réussit-elle, mais pas celle-ci? Le problème est une mauvaise configuration des serveurs (voyez vous-même en utilisant le -debug
option). Le "bon" serveur envoie toute la chaîne de certificats lors de la négociation, vous fournissant ainsi les certificats intermédiaires nécessaires.
Mais le serveur en échec vous envoie niquement le certificat d'entité finale, et OpenSSL n'est pas capable de télécharger le certificat intermédiaire manquant "à la volée" (ce qui serait possible en interprétant l'extension Authority Information Access) . Par conséquent, votre tentative échoue avec s_client
_ mais cela aboutirait néanmoins si vous naviguez vers la même URL en utilisant par exemple FireFox (qui prend en charge la fonctionnalité "découverte de certificat").
Vos options pour résoudre le problème sont soit de résoudre ce problème côté serveur en faisant en sorte que le serveur envoie également toute la chaîne, ou en transmettant le certificat intermédiaire manquant à OpenSSL en tant que paramètre côté client.
Ajout d'informations supplémentaires à la réponse de gaufrage.
En termes simples, il existe un certificat incorrect dans votre chaîne de certificats.
Par exemple, votre autorité de certification vous aura probablement donné 3 fichiers.
Vous avez très probablement combiné tous ces fichiers en un seul paquet.
-----BEGIN CERTIFICATE-----
(Your Primary SSL certificate: your_domain_name.crt)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Your Intermediate certificate: DigiCertCA.crt)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Your Root certificate: TrustedRoot.crt)
-----END CERTIFICATE-----
Si vous créez le kit, mais utilisez une version ancienne ou incorrecte de votre certificat intermédiaire (DigiCertCA.crt dans mon exemple), vous obtiendrez les symptômes exacts que vous décrivez.
Téléchargez à nouveau tous les certificats de votre autorité de certification et créez un nouveau lot.
J'ai rencontré le même problème lors de l'installation de mon certificat signé sur une instance Amazon Elastic Load Balancer.
Tout semblait trouver via un navigateur (Chrome) mais accéder au site via mon Java a généré l'exception javax.net.ssl.SSLPeerUnverifiedException
Ce que je n’avais pas fait, c’est de fournir un fichier "chaîne de certificats" lors de l’installation de mon certificat sur mon instance ELB (voir https://serverfault.com/questions/419432/install-ssl-on-Amazon-elastic-load) -balancer-with-godaddy-wildcard-certificate )
Notre clé publique signée ne nous a été envoyée que par le pouvoir de signature. J'ai donc dû créer mon propre fichier de chaîne de certificats. À l'aide du panneau d'affichage du certificat de mon navigateur, j'ai exporté chaque certificat de la chaîne de signature. (L'ordre de la chaîne de certificats est important, voir https://forums.aws.Amazon.com/message.jspa?messageID=222086 )