web-dev-qa-db-ja.com

opensslを使用して証明書チェーンを表示する方法

私はWindows、Linux、Macを組み合わせて使用​​していますが、各OSで使用可能なデフォルトツールを使用して証明書の詳細を表示する方法に大きな違いがあることに気付きました。

Windowsが証明書の詳細を表示する方法は非常に簡潔です。具体的には、証明書チェーン。例としてスクリーンショットを参照してください。 Windows certificate view そして、ここでもWindowsにありますが、certutilツールを使用しています。 (わかりましたそれはpfxを検査していますが、あなたは要点を得ます)。 Windows certutil view ただし、Macでは、これがKeychain Accessに同じ証明書を表示する方法です。 Mac Keychain Access view ご覧のとおり、Windowsやcertutilが示す証明書チェーンを簡単に識別できるようにする、すごく階層的なビューはありません。また、opensslを使用して証明書チェーンを表示する方法もわかりません。たとえば、次のコマンドopenssl x509 -in certificate.crt -textは、階層チェーンを表示せず、発行者のみを表示します。 opensslまたはネイティブのMacツールを使用して、証明書のチェーンをテキストまたはイメージのいずれで表示する方法はありますか?

[編集]:所属する会社内で配布するために、証明書チェーン全体(ルートを除く)を含むPFXファイルを作成することがよくあります。プロセスの一部として、発行元のCAからダウンロードした証明書が正しいことと、PFXを作成するためにopensslに渡す前に正しい順序になっていることを再確認します。明確にするために、私が自分のコンピューターでローカルで作業している証明書のチェーンを表示する方法を質問しています。

3
KFM

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
4
Bert

ネイティブを含む他のMacツールを手伝うことはできません。 OpenSSLはGUIのない​​純粋なコマンドライン製品ですが、もちろん、ライブラリ部分(libcrypto)を使用して独自のGUIを作成することもできます。

コマンドラインから、openssl verifyは、可能であれば、指定した各リーフ証明書からチェーンを構築(および検証)し、さらに-untrustedから中間体(繰り返し可能)を生成します。 (s)-trustedor-CAfileおよび/または-CApathorのルート(またはアンカー)へのデフォルトのトラストストア。通常、システムまたはビルドによって決定されますが、envvarsでオーバーライドできます。これが失敗すると、エラーが発生します。 1.1.0以降では、成功して-show_chainも指定すると、各証明書のサブジェクト名が表示されます。これは、それらを識別するのに十分な場合とそうでない場合があります。サブジェクトごとに1つの証明書しかない場合、それはかなり簡単です。異なる発行者からの同じサブジェクトの証明書がある場合、next証明書の名前(最後の場合を除き、-partial_chainも使用しない限り自己署名されている)を確認するだけで十分です。同じサブジェクトに対して複数の証明書がある場合and発行者は難しいです。

私はよく働いている会社内で配布するために、証明書チェーン全体(ルートを除く)を含むPFXファイルを作成します。プロセスの一部として、発行元のCAからダウンロードした証明書が正しいこと、およびそれをopensslに渡してPFXを作成する前に正しい順序になっていることを再確認します。

「ルートバー」部分を除いて、このワークフローを逆にすることができます。チェーンを手動で作成してチェックしてから使用する代わりに、openssl pkcs12 -export -chainを使用して、可能なチェーン証明書を-CAfileまたは-CApathとして提供できます。それはチェーンを構築し(実際には副作用としても検証します)、成功した場合はonly秘密鍵とリーフと有効なチェーンを含むPKCS12を作成しますが、失敗した場合はエラーを出力し、出力を作成しません- -つまり、有効なチェーンがない場合。

2