web-dev-qa-db-fra.com

Code de retour OpenSSL Verify: 20 (impossible d'obtenir le certificat de l'émetteur local)

J'utilise Windows Vista et j'essaie de me connecter via https pour télécharger un fichier dans un formulaire en plusieurs parties, mais je rencontre des problèmes avec le certificat de l'émetteur local. J'essaie simplement de comprendre pourquoi cela ne fonctionne pas maintenant, et de revenir à mon code cURL plus tard, une fois que tout sera réglé. Je lance la commande:

openssl s_client -connect connect_to_site.com:443

Il me donne un certificat numérique de VeriSign, Inc., mais génère également une erreur:

Verify return code: 20 (unable to get local issuer certificate)

Quel est le certificat de l'émetteur local? Est-ce un certificat de mon propre ordinateur? Y a-t-il un moyen de contourner ceci? J'ai essayé d'utiliser le fichier -CAfile mozilla.pem mais me donne toujours la même erreur.

51
bryan sammon

J'ai eu le même problème et l'ai résolu en passant le chemin à un répertoire où les clés de CA sont stockées Sur Ubuntu c'était:

openssl s_client -CApath /etc/ssl/certs/ -connect address.com:443
86
Jan Wrobel

Cette erreur se produit également si vous utilisez un certificat auto-signé avec un keyUsage manquant de la valeur keyCertSign.

5
Conrado

Solution: Vous devez explicitement ajouter le paramètre -CAfile your-ca-file.pem.

Note: J'ai aussi essayé param -CApath mentionné dans une autre réponse, mais ça ne marche pas pour moi.

Explication: Erreur unable to get local issuer certificate signifie que la openssl ne connaît pas votre certificat d'autorité de certification racine.


Remarque: Si vous avez le serveur Web avec plusieurs domaines , n'oubliez pas d'ajouter également le paramètre -servername your.domain.net. Ce paramètre "Définira le nom de serveur de l'extension TLS dans ClientHello". Sans ce paramètre, la réponse contiendra toujours le certificat SSL par défaut (pas un certificat, qui correspond à votre domaine).

5
Martin

J'avais le même problème sous OSX OpenSSL 1.0.1i sous Macports et devais aussi spécifier CApath comme solution de contournement (et comme mentionné dans le rapport de bogue Ubuntu, même un invalid CApath fera regarder openssl dans le répertoire par défaut) . Il est intéressant de noter que la connexion au même serveur à l’aide des fonctions openssl de PHP (utilisées dans PHPMailer 5) fonctionnait parfaitement.

3
Brophy

placez votre certificat de certification et votre certificat racine dans/usr/share/ca-certificate ou /usr/local/share/ca-certificate.Then 

dpkg-reconfigure ca-certificates

ou même réinstaller le paquet ca-certificate avec apt-get.

Ceci fait, votre certificat est collecté dans la base de données du système: /Etc/ssl/certs/ca-certificates.crt

Alors tout devrait bien se passer.

2
user1462586

Votre serveur est-il configuré pour l'authentification du client? Si tel est le cas, vous devez transmettre le certificat client lors de la connexion au serveur.

2
Sivachandran

J'ai été confronté au même problème, Il a été corrigé après avoir conservé la valeur sujet de l'émetteur dans le certificat car il fait l'objet du certificat d'émetteur.

veuillez donc cocher la case "valeur de l'émetteur dans le certificat (cert.pem) == sujet de l'émetteur (CA.pem)"

openssl verify -CAfile CA.pem cert.pem 
cert.pem: OK

1
Harikumar Pondreti

Avec authentification client:

openssl s_client -cert ./client-cert.pem -key ./client-key.key -CApath /etc/ssl/certs/ -connect foo.example.com:443
1
toppur

Créez le fichier de chaîne de certificats avec les noms intermédiaire et racine.

cat intermediate/certs/intermediate.cert.pem certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem

chmod 444 intermediate/certs/ca-chain.cert.pem

Puis vérifier

openssl verify -CAfile intermediate/certs/ca-chain.cert.pem \
  intermediate/certs/www.example.com.cert.pem

www.example.com.cert.pem: OK Déployez le certificat

0
sanjay

ces messages d'erreur signifient que CABundle n'est pas fourni par (-CAfile ...) OR le fichier CABundle n'est pas fermé par un certificat racine auto-signé.

Ne t'inquiète pas. La connexion au serveur fonctionnera même si vous recevez le message de ce dernier de openssl s_client ... (en supposant que vous ne preniez pas d’autre erreur aussi)

0
Pal Sonkoly