Comment faire en sorte que openssl utilise un certificat sans le spécifier via -CAfile

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

  • Est-ce que 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 le GTE_CyberTrust_Global_Root.pem est un certificat racine de niveau supérieur, il devrait fonctionner par défaut.
  • @GeorgeBailey Merci. Cest intermédiaire. Aucune vraie raison de ne pas partager lemplacement: bigfishgames-a.akamaihd.net:443 Si je ' demande à nos webmasters de résoudre ce problème, que demanderais-je? Nhésitez pas à faire de votre réponse une réponse (ie " Rien de ce que vous pouvez faire sur le client, le serveur doit faire X ").
  • Ce ' est étrange. Je mattendais à ce que cela fonctionne une fois inclus dans / etc / ssl / certs et ca-certificates.crt
  • Eh bien, il ' nest pas encore évident si le serveur cest le problème. Il semble que le serveur serve une autorité de certification intermédiaire et que SSLLabs traite CyberTrust comme une racine de premier niveau. Vous vous trompez peut-être sur le fait que CyberTrust est un intermédiaire, mais vous avez peut-être raison. Je ' ne suis pas sûr. Vérifiez la chaîne / le chemin du certificat dans votre navigateur préféré et / ou sur SSLLabs . Peut-être que openssl nest pas configuré avec des certificats racine de niveau supérieur? Avez-vous essayé google.com:443?
  • Même comportement pour google.com

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *