私はWindows、Linux、Macを組み合わせて使用していますが、各OSで使用可能なデフォルトツールを使用して証明書の詳細を表示する方法に大きな違いがあることに気付きました。
Windowsが証明書の詳細を表示する方法は非常に簡潔です。具体的には、証明書チェーン。例としてスクリーンショットを参照してください。 そして、ここでもWindowsにありますが、certutil
ツールを使用しています。 (わかりましたそれはpfxを検査していますが、あなたは要点を得ます)。 ただし、Macでは、これがKeychain Access
に同じ証明書を表示する方法です。 ご覧のとおり、Windowsやcertutil
が示す証明書チェーンを簡単に識別できるようにする、すごく階層的なビューはありません。また、openssl
を使用して証明書チェーンを表示する方法もわかりません。たとえば、次のコマンドopenssl x509 -in certificate.crt -text
は、階層チェーンを表示せず、発行者のみを表示します。 openssl
またはネイティブのMacツールを使用して、証明書のチェーンをテキストまたはイメージのいずれで表示する方法はありますか?
[編集]:所属する会社内で配布するために、証明書チェーン全体(ルートを除く)を含むPFXファイルを作成することがよくあります。プロセスの一部として、発行元のCAからダウンロードした証明書が正しいことと、PFXを作成するためにopenssl
に渡す前に正しい順序になっていることを再確認します。明確にするために、私が自分のコンピューターでローカルで作業している証明書のチェーンを表示する方法を質問しています。
showcerts
を使用:
openssl s_client -showcerts -connect www.serverfault.com:443
簡潔にするために一部の情報を削除した出力:
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
ネイティブを含む他のMacツールを手伝うことはできません。 OpenSSLはGUIのない純粋なコマンドライン製品ですが、もちろん、ライブラリ部分(libcrypto)を使用して独自のGUIを作成することもできます。
コマンドラインから、openssl verify
は、可能であれば、指定した各リーフ証明書からチェーンを構築(および検証)し、さらに-untrusted
から中間体(繰り返し可能)を生成します。 (s)-trusted
or-CAfile
および/または-CApath
orのルート(またはアンカー)へのデフォルトのトラストストア。通常、システムまたはビルドによって決定されますが、envvarsでオーバーライドできます。これが失敗すると、エラーが発生します。 1.1.0以降では、成功して-show_chain
も指定すると、各証明書のサブジェクト名が表示されます。これは、それらを識別するのに十分な場合とそうでない場合があります。サブジェクトごとに1つの証明書しかない場合、それはかなり簡単です。異なる発行者からの同じサブジェクトの証明書がある場合、next証明書の名前(最後の場合を除き、-partial_chain
も使用しない限り自己署名されている)を確認するだけで十分です。同じサブジェクトに対して複数の証明書がある場合and発行者は難しいです。
私はよく働いている会社内で配布するために、証明書チェーン全体(ルートを除く)を含むPFXファイルを作成します。プロセスの一部として、発行元のCAからダウンロードした証明書が正しいこと、およびそれをopensslに渡してPFXを作成する前に正しい順序になっていることを再確認します。
「ルートバー」部分を除いて、このワークフローを逆にすることができます。チェーンを手動で作成してチェックしてから使用する代わりに、openssl pkcs12 -export -chain
を使用して、可能なチェーン証明書を-CAfile
または-CApath
として提供できます。それはチェーンを構築し(実際には副作用としても検証します)、成功した場合はonly秘密鍵とリーフと有効なチェーンを含むPKCS12を作成しますが、失敗した場合はエラーを出力し、出力を作成しません- -つまり、有効なチェーンがない場合。