J'utilise un mélange de Windows, Linux et Mac et j'ai remarqué de grandes différences dans la manière dont chaque système d'exploitation affiche les détails du certificat à l'aide des outils par défaut disponibles dans chacun.
La façon dont Windows affiche les détails du certificat est très succinct. Plus précisément, la chaîne de certificats. Voir Capture d'écran comme exemple. Et ici, c'est à nouveau dans Windows, mais en utilisant l'outil certutil
. (D'accord, il inspecte un PFX mais vous obtenez le point). Cependant sur un Mac, voici comment il montre le même cert dans Keychain Access
. Comme vous pouvez le constater, il ne dispose pas d'une belle vue hiérarchique qui facilite l'identification de la chaîne de certificats que Windows ou certutil
montre - au moins pas à mes yeux non entraînés (éventuellement). Je n'ai pas non plus compris une façon de montrer la chaîne de certificats à l'aide de openssl
non plus, par exemple, la commande suivante openssl x509 -in certificate.crt -text
ne montre pas une chaîne hiérarchique - seul l'émetteur. Ainsi existe-t-il un moyen d'afficher une chaîne d'un certificat s'il s'agit d'un texte ou d'une image à l'aide de openssl
ou d'outils mac natifs?
[EDIT]: Je crée souvent des fichiers PFX avec toute la chaîne de certificats (barre de la racine) pour la distribution au sein de la société que je travaille. Dans le cadre du processus, je vérifie que les certs que j'ai téléchargés à partir de l'autorité de certification émettrice sont corrects et qu'ils sont dans le bon ordre avant de le transmettre à openssl
pour mintser le PFX. Donc, pour être clair, je m'interroge sur la manière de voir la chaîne d'un certificat que je travaille sur place sur mon ordinateur.
Utilisez showcerts
:
openssl s_client -showcerts -connect www.serverfault.com:443
Sortie avec quelques informations supprimées pour la brièveté:
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = *.stackexchange.com
verify return:1
---
Certificate chain
0 s:/CN=*.stackexchange.com
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
-----BEGIN CERTIFICATE-----
*REMOVED*
-----END CERTIFICATE-----
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
i:/O=Digital Signature Trust Co./CN=DST Root CA X3
-----BEGIN CERTIFICATE-----
*REMOVED*
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=*.stackexchange.com
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: X25519, 253 bits
Je ne peux pas aider pour d'autres outils MAC, y compris natif. OpenSSL est un produit Pure Commandline sans interface graphique, bien que bien sûr, vous pourriez utiliser la partie de la bibliothèque (libcrypto) et écrire votre propre interface graphique.
De Commandline, openssl verify
volonté si possible construire (et valider) une chaîne du cert de la feuille que vous le donnez, plus les intermédiaires (s) de -untrusted
(qui peut être répété), et éventuellement plus intermédiaire (s) à une racine (ou d'ancre) dans -trusted
o-CAfile
et/ou -CApath
o Le dépôt de confiance par défaut, qui est généralement déterminé par votre système ou la construction, mais peut être remplacé par EnvvVars. Si cela échoue, cela donne une erreur. En 1.1.0 si cela réussit et que vous spécifiez également -show_chain
, il affiche les noms de sujet de chaque certificat - qui peut être suffisant pour les identifier. Si vous n'avez qu'un certificat par sujet, c'est assez facile. Si vous avez des certs pour le même sujet à partir de différents émetteurs, en regardant le nom suivant CERT (sauf sur le dernier, qui est autonome, sauf si vous utilisez également -partial_chain
) est assez. Si vous avez plusieurs certs pour le même sujet et émetteur, il est plus difficile.
Je crée souvent des fichiers PFX avec toute la chaîne de certificats (barre de la racine) pour la distribution au sein de la société que je travaille. Dans le cadre du processus, je vérifie que les certs que j'ai téléchargés à partir de l'autorité de certification émettrice sont corrects et qu'ils sont dans le bon ordre avant de le transmettre à OpenSSL pour mintser le PFX.
À l'exception de la partie "bar la racine", vous pouvez inverser ce flux de travail. Au lieu de construire manuellement et de vérifier la chaîne puis de l'utiliser, vous pouvez utiliser openssl pkcs12 -export -chain
et fournir les certificats de la chaîne possibles comme (ou in) -CAfile
et/ou -CApath
. Cela construirait la chaîne (valide-t-elle également comme un effet secondaire) et créerait un PKCS12 contenant niquement la chaîne Valide de PrivateKey and Leaf Plus s'il réussisse, mais donnez une erreur et crée une sortie sans succès - - c'est-à-dire si vous n'avez pas de chaîne valide.
Il suffit de bâtir sur la réponse de Dave Thompson, c'est ce dont vous avez besoin pour vérifier un ensemble de certificats/chaîne constitué d'un intermédiaire et de votre propre feuille:
# split your certificate chain into individual certificates
$ csplit -z -f individual- bundle.pem '/-----BEGIN CERTIFICATE-----/' '{*}'
1977
1850
# verify the chain and show the info in the chain
$ openssl verify -show_chain -untrusted individual-01 individual-00
individual-00: OK
Chain:
depth=0: CN = foobar.example.com (untrusted)
depth=1: C = NO, O = Buypass AS-983163327, CN = Buypass Class 2 CA 2 (untrusted)
depth=2: C = NO, O = Buypass AS-983163327, CN = Buypass Class 2 Root CA