web-dev-qa-db-ja.com

OpenSSLのSSL_get_verify_resultで検証されているもの

OpenSSLでは、次の関数を使用して証明書を検証します。

SSL_get_verify_result

マニュアル こちら を見ました。ただし、何が検証されているかは詳しく説明していません。この機能が何を検証するのかを明確にしていただけますか? (例:有効期限、信頼チェーンなど)。結果が正確に生成される方法と、検証が行われる要因は何かを知ることは私にとって重要ですか?

2
user9371654

答えは RETURN VALUES セクションのリンク先のmanページの下部にあり、「その他の値: verify(1) に記載されています。

確認ページの VERIFY OPERATION セクションで、質問に回答します。

検証プログラムは内部SSLおよびS/MIME検証と同じ機能を使用するため、この説明はこれらの検証操作にも適用されます

質問したすべての詳細は、「操作の確認」セクションに記載されています。

Mods、私はリンクの回答が通常眉をひそめていることを知っていますが、クレントは特定のリンクを見つける方法を尋ねました。

編集:

Dave Thompson's以下の回答 を確認してください。この呼び出しは最新の検証実行の結果のみを返すことを理解することが重要です。実際に証明書の検証を実行することはありません。

0
John Deters

SSL_get_verify_result()は実際には検証を行いません。指定されたSSLオブジェクトに対する最新のフルハンドシェイク(存在する場合)中に行われた証明書検証(存在する場合)の結果(一部)を返します。あなたが本当にthat検証が何をしたかを知りたいと仮定すると、それはアプリケーションコードにかなり依存します。

コードがSSLオブジェクトを作成する前にSSL_CTX_set_cert_verify_callbackを使用してコールバックを設定する場合、ハンドシェイク中の検証は、そのコールバックを呼び出すことから完全に構成されます。このコールバックが設定されていない場合、manページに記載されているように、「組み込み検証関数」が使用されます。これは、実際にはX509_verify_cert()(独自の非常に有用なmanページはありません)とそれおおまかに Johnが参照するverify(1)のマニュアルページに記載されている内容と、時間の経過とともに追加されたものの、常にドキュメントに組み込まれなかったもの(例:NameConstraintsとDANE、そしてsome失効チェックは言うまでもありません)しかし、このチェックは多数のオプションとパラメーターによって変更および「調整」できますが、それらすべてがverify(1)で使用できるわけではありません。 SSL_CTXまたはSSLレベルのいずれかで最も設定可能であり、上記の「cert_verify_callback」とは別のものであり、まったく異なるオプションの「verify_callback」を含みます。 SSL_[CTX_]set_verify[_depth]SSL_[CTX_]load_verify_locations et rel、X509_STORE_*、およびX509_STORE_CTX_*関数(X509_STORE_CTX_set0_paramおよび関連するX509_VERIFY_PARAM*関数、特にX509_VERIFY_PARAM_set_flagsなど)のマニュアルページを参照してください。

そして、それが十分に正確ではなく、そうでない可能性がある場合は、ソースを確認してください。実行している(または実行する予定の)バージョンについては、この(非常に複雑な)領域に時間の経過とともにいくつかの変更があったためです。特定のバージョンでも、すべてのことを正確に説明すると、(ほぼ確実に)スタックの回答制限を超えてしまい、約1週間かかるだけでなく、すぐに陳腐化する可能性があるため、そのようなことはしません。特定の問題が1つまたは非常に少ない場合は、実用的な時間で解決できる可能性があります。

1