J'ai trois certificats dans une chaîne:
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
Il n'est pas nécessaire de combiner les deux certificats pour les vérifier.
Si vous avez les trois certificats suivants:
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 ...
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.