Jutilise cette commande:
openssl s_client -connect example.com:443 -CAfile /etc/ssl/certs/GTE_CyberTrust_Global_Root.pem
Cela fonctionne. Si je ne spécifie pas ce fichier CA, jobtiens un code 20. Le certificat est dans /etc/ssl/certs
et /usr/lib/ssl/certs -> /etc/ssl/certs
Il est également inclus dans ca-certificates.crt
Quest-ce qui détermine si openssl peut trouver mon certificat ou non et comment puis-je le faire accepter ce certificat sans le spécifier explicitement?
Commentaires
Réponse
Il existe un bogue OpenSSL connu où s_client ne vérifie pas le magasin de certificats par défaut lorsque vous ne passez pas le -CApath
ou -CAfile
argument. OpenSSL sur Ubuntu 14.04 souffre de ce bogue comme je « vais le démontrer:
Version:
ubuntu@puppetmaster:/etc/ssl$ openssl version OpenSSL 1.0.1f 6 Jan 2014
Ne parvient pas à utiliser le magasin par défaut lorsque je ne passez pas le `-ca:
ubuntu@puppetmaster:/etc/ssl$ openssl s_client -quiet -connect gmail.com:443 depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify error:num=20:unable to get local issuer certificate verify return:0
Maintenant, je passe null comme -CApath
et cela fonctionne:
ubuntu@puppetmaster:/etc/ssl$ openssl s_client -quiet -connect gmail.com:443 -CApath /dev/null depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority verify return:1 depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify return:1 depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2 verify return:1 depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = mail.google.com verify return:1
Malheureusement, je ne pense pas quune liste des versions dOpenSSL concernées existe. La seule façon de le savoir est de la tester.
Commentaires
- Merci. Jutilisais cette version. OpenSSL 1.1.0 ne semble pas avoir résolu le problème. I ' m ne voyez pas le problème répertorié ici: github.com/openssl/openssl/issues Pouvez-vous faire référence au problème?
- Il ' dans l ancien outil de suivi des problèmes RT . Il existe un correctif, il ' se trouve derrière une connexion (invité: invité) Il ' s problème # 3697, marqué comme résolu. rt.openssl.org/Ti cket / Display.html? id = 3697
- Ok, jai confirmé que cela est corrigé dans la version 1.1, au moins dans le fork de richsalz. Lors de la mise à niveau, je nai pas remarqué au départ que le répertoire de base était déplacé vers
/usr/local/ssl
qui avait un répertoire certs non mappé à/etc/ssl/certs
. - Je peux vérifier que le bogue existe dans CentOS 6.8 (OpenSSL 1.0.1e-fips 11 février 2013).
-
openssl version -d
vous donne également le répertoire de configuration de base …
Réponse
"How to get openssl to use a cert without specifying it via -CAfile".
Javais la même chose exigence. Je voulais utiliser un répertoire dautorités de certification que je " de confiance " localement. Je ne voulais pas de Trust store
résultats polluants par défaut.
c_rehash
Avant dappeler la commande verify
, la page daide: man verify
ma guidé pour utiliser c_rehash
:
rehash scanne les répertoires et calcule une valeur de hachage de chaque " .pem ", " .crt ", " .cer " ou " .crl " fichier dans le liste de répertoires spécifiée et crée des liens symboliques pour chaque fichier
export CERTS=/Users/{path_to_your_certs} [path to openssl]/openssl/bin/c_rehash ${CERTS}
Vérifiez un certificat feuille
openssl verify -CApath ${CERTS} local_leaf.pem local_leaf.pem: OK
Vous chargez lautorité de certification racine et IntCA dans le répertoire CERTS
.Si je navais pas fait létape de répétition, cela me donnerait lerreur 20 unable to get local issuer certificate
.
GTE_CyberTrust_Global_Root.pem
est une autorité de certification intermédiaire? Si tel est le cas, il se peut que votre serveur Web ne parvienne pas à servir ce certificat CA intermédiaire avec votre certificat de site. Cette lacune de votre serveur Web pourrait entraîner des problèmes de compatibilité avec certains ordinateurs. Dun autre côté, si leGTE_CyberTrust_Global_Root.pem
est un certificat racine de niveau supérieur, il devrait fonctionner par défaut.openssl
nest pas configuré avec des certificats racine de niveau supérieur? Avez-vous essayégoogle.com:443
?