web-dev-qa-db-fra.com

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

J'ai trois certificats dans une chaîne:

  • root.pem
  • intermedi.pem
  • john.pem

Lorsque je les examine à l'aide de openssl x509 -in [filename] -text -noout, leur apparence est correcte, root.pem semble être auto-signé (Issuer == Subject) et l'objet 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

À ma connaissance, ceci signifie qu'openssl ne parvient pas à trouver l'émetteur pour intermediate.pem. Ce qui n’a aucun sens puisque root.pem est bien l’émetteur de intermediate.pem.

Qu'est-ce que je rate?


Edit: j’avais initialement posté une réponse disant que root.pem et intermediate.pem devaient être concaténés dans un fichier, puis que ce fichier devait être utilisé comme paramètre pour -CAfile. Cela est FAUX, car cela fait implicitement la confiance de intermediate.pem, comme le souligne Johannes Pille . Lisez le lien qu'il a posté dans ma réponse supprimée: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html

12
Jong Bor

Il n'est pas nécessaire de combiner les deux certificats pour les vérifier.

Si vous avez les trois certificats suivants:

  • root.pem - stocke un certificat auto-signé.
  • intermediate.pem - stocke un certificat signé par root.pem
  • john.pem - stocke un certificat signé par intermediate.pem

Et si vous ne faites confiance qu’à root.pem, vous devrez alors vérifier john.pem avec la commande suivante:

openssl verify -CAfile root.pem -untrusted intermediate.pem john.pem

Si vous aviez plusieurs intermédiaires, vous pouvez simplement chaîner -untrusted intermediate2.pem -untrusted intermediate3.pem ...

10
antiduh

ce que @antiduh a dit ne fonctionne que pour un seul certificat intermédiaire. En ajoutant plus d'un -untrusted intermediate.pem dans la commande semble ne pas fonctionner. Je ne suis pas sûr que cela soit lié à une version spécifique d'OpenSL.

Selon le document openssl: [ https://linux.die.net/man/1/verify]

fichier non approuvé

Un fichier de certificats non approuvés. Le fichier doit contenir plusieurs certificats

Dans mon cas, j'ai une chaîne comme celle-ci: root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem

par chat intermediate1.pem & intermediate2.pem dans un seul fichier intermediary-chain.pem, puis exécutez openssl verify -CAfile root.pem -untrusted intermediate-chain.pem john.pem fonctionne pour moi.

Il semble également que l'extension in ca dont vous avez besoin ait défini basicConstraints = CA:true, sinon je rencontre toujours une erreur de rapport de vérification openssl.

2
Yang Xu