J'ai trois certificats dans une chaîne:
- root.pem
- intermediaire.pem
- john.pem
Lorsque je les examine à l'aide de openssl x509 -in [filename] -text -noout
leur apparence, root.pem semble être auto-signé (Issuer == Subject), 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
À ma connaissance, cela signifie que openssl n'est pas en mesure de trouver l'émetteur de intermediaire.pem. Ce qui n'a pas de sens puisque root.pem est bien l'émetteur de intermediaire.pem.
Qu'est-ce que je rate?
Edit: j'avais initialement posté une réponse disant que root.pem et intermediaire.pem devraient être concaténés dans un fichier, puis on devrait utiliser ce fichier comme paramètre pour -CAfile
. C'est faux, car cela fait implicitement confiance à intermediaire.pem, comme le souligne Johannes Pille . Lisez le lien qu'il a publié dans ma réponse supprimée: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html
la source
Réponses:
Vous n'avez pas besoin de regrouper les deux certificats pour les vérifier.
Si vous disposez des trois certificats suivants:
Et vous ne faites confiance qu'à root.pem, vous vérifierez alors
john.pem
avec la commande suivante:Si vous aviez de nombreux intermédiaires, vous pourriez simplement enchaîner
-untrusted intermediate2.pem -untrusted intermediate3.pem ...
la source
openssl
je les récupèrerais et vérifierais les certificats. Y a-t-il une raison à cela? Par exemple, la personne qui a signé le certificat utilisateur ne l'a pas signé avec l'intermédiaire mais avec la racine, ou quelque chose?untrusted
indicateur une fois. L'utilisation de l'indicateur non approuvé plusieurs fois ne fonctionne pas.-untrusted
options multiples (dans n'importe quel ordre) ou une seule-untrusted
option pointant vers un ensemble d'intermédiaires (concaténés dans n'importe quel ordre) fonctionnent. C'est avec OpenSSL version 1.1.1c sur Ubuntu.ce que @antiduh a dit ne fonctionne que pour un seul cas de certificat intermédiaire pour moi. En ajouter plusieurs
-untrusted intermediate.pem
dans la commande ne semble pas fonctionner. Je ne sais pas si c'est lié à une version spécifique d'OpenSL.Selon le document openssl: [ https://linux.die.net/man/1/verify]
Dans mon cas, j'ai une chaîne comme:
root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem
par cat intermediaire1.pem et intermediaire2.pem dans un seul fichier intermediaire-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 que vous devez définir,
basicConstraints = CA:true
sinon je rencontre toujours opensl, vérifiez l'erreur de rapport.la source