4

リモート ドメインの TLS/SSL 証明書が「信頼できる」かどうかをコマンド ラインから判断できるようにしたいと考えています。

これは、私が数週間前に遊んでいた openssl の例です。ここでは、openssl を使用して証明書を取得し、それを openssl の「verify」コマンドにパイプします。「verify」コマンドは証明書を検証すると思いましたが、「verify」コマンドは証明書チェーンを検証するだけであると理解しています(私はそう思います)。(cdn.pubnub.com は、使用例として Twitter で簡単に検索して見つけたドメインです)

echo "GET /" | openssl s_client -connect cdn.pubnub.com:443 | openssl x509 -text | openssl verify

cdn.pubnub.comドメイン (執筆時点)からわかるように、ブラウザー (少なくとも Chrome) は証明書を信頼していません (証明書のドメインが一致しないため)。ただし、openssl の「検証」コマンドは、「信頼できる」または「信頼できない」など、その情報を推測できるものを出力しません。

私が考えたもう 1 つの方法は、ヘッドレス ブラウザー ( PhantomJSなど) を使用し、返されるエラーを解析することです。PhantomJS は単にエラーであることが判明しましたが、詳細は何も提供していないため、エラーが別の原因で発生した可能性があるため、これを使用することはできません。

証明書が信頼されているかどうかをコマンドラインから確認するのがこれほど難しいとは思いませんでした。証明書を信頼するすべてのデータを解析してチェックする必要はありません。

コマンドラインからリモートドメインの証明書が信頼されているかどうかを確認できるライブラリまたはその他の方法はありますか?

4

2 に答える 2

5

curl(およびlibcurl) https URL に OpenSSL を使用し、-k, --insecureオプションが有効でない限り、証明書の有効性をチェックします。

zsh 29354 % curl https://cdn.pubnub.com/
curl: (51) SSL peer certificate or SSH remote key was not OK

ご覧のとおり、証明書が無効である理由についてはあまり詳しく説明されていませんが、それ以外の場合は、ヘッドレス ブラウザーと同じくらい優れており、はるかに軽量です。

于 2013-01-13T15:26:08.957 に答える
3

それはあなたが「信頼できる」と考えるものに依存します。コア暗号チェック(デジタル署名のチェックなど)のほかに、クライアントは通常次のことを行います。

  1. 証明書が信頼されたルートにチェーンされていることを確認します

  2. 現在の時刻がnotValidBefore属性とnotvalidAfter属性の間にあることを確認します。

  3. 証明書は取り消されません。

  4. keyUsageと他の証明書の制約が一致します。

  5. 通信しているエンティティは、証明書のサブジェクトに何らかの形で含まれています(サーバーの場合、これは通常、ホスト名がCNまたはsubjectAlternativeNameとしてリストされていることを意味します)。

あなたの場合、ステップ5を確認するための情報(つまりホスト名)が欠落しているため、確認できません。この手順は自分で行う必要があります。証明書が信頼できるかどうかを確認するために異なるクライアントが異なるチェックを実行するため、1つの回答がすべての可能なクライアントに適用されるとは限らないことに注意してください。インストールを詳細にチェックしたい場合は、ssllabshttps://www.ssllabs.com/ssltest/のチェックを使用することを検討してください

于 2013-01-14T10:53:52.330 に答える