Pourquoi ne puis-je pas vérifier cette chaîne de certificats ?

J'ai trois certificats dans une chaîne :

  • racine.pem
  • intermédiaire.pem
  • jean.pem

Quand je les examine en utilisant openssl x509 -in [filename] -text -noout ils ont l'air bien, root.pem semble être auto-signé (Émetteur == Sujet), et le Sujet de chaque certificat est l'émetteur du suivant, comme prévu.

Et en effet je peux vérifier la chaîne jusqu'au certificat intermédiaire:

$ openssl verify -CAfile root.pem root.pem
root.pem: OK
$ openssl verify -CAfile root.pem intermediate.pem
intermediate.pem: OK

Cependant, john.pem échoue :

$ openssl verify -CAfile root.pem -CAfile intermediate.pem john.pem
john.pem: C = CL, [...redacted data...]
error 2 at 1 depth lookup:unable to get issuer certificate

Au meilleur à ma connaissance, cela signifie qu'openssl est incapable de trouver l'émetteur pour intermédiaire.pem. Ce qui n'a pas de sens depuis root.pem est en effet l'émetteur des intermédiaires.pem.

Qu'est-ce qui me manque ?


Edit: J'avais initialement posté une réponse disant que root.pem et intermédiaire.pem doit être concaténé dans un fichier, puis il faut utiliser ce fichier comme paramètre pour -CAfile. C'est FAUX, car cela fait implicitement confiance à l'intermédiaire.pem, as Johannes Pille souligner. Lisez le lien qu'il a posté dans ma réponse supprimée: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html

demandé sur