8

Boost のSSL Clientを見ています。コメントに OpenSSL への参照があります (申し訳ありませんが、行番号はありません)。

// The verify callback can be used to check whether the certificate that is
// being presented is valid for the peer. For example, RFC 2818 describes
// the steps involved in doing this for HTTPS. Consult the OpenSSL
// documentation for more details. Note that the callback is called once
// for each certificate in the certificate chain, starting from the root
// certificate authority.

適切な OpenSSL の使用と検証は難しい場合があります。経験から、ライブラリを正しく使用するには、次のことを実行する必要があることを知っています。

  • Context オブジェクトで SSLv2、SSLv3、および圧縮を無効にする
  • チェーンの構築とチェックのために適切なルート証明書を提供する
  • 呼び出しSSL_get_peer_certificateて、証明書が非 NULL であることを確認します
  • 呼び出しSSL_get_verify_resultて、結果が次のとおりであることを確認します。X509_V_OK
  • 名前の照合を実行します (CN または SAN は、要求されたホストと一致する必要があります)

OpenSSL 1.1.0 は名前チェックを提供しますが、現時点では HEAD のみです。OpenSSL 変更ログから:

Integrate hostname, email address and IP address checking with certificate
verification. New verify options supporting checking in opensl utility.

と:

New functions to check a hostname email or IP address against a
certificate. Add options x509 utility to print results of checks against
a certificate.

クライアント コードで Boost が構成またはチェックを実行している場所がわかりません。

Boost は正確に何を構成し、asioSSL を使用するときにそのライブラリ コンポーネントで何をチェックまたは検証しますか?

4

1 に答える 1

8

簡単な答え:あなたが引用したリンクからのBoostコールバック関数は、何も検証しません。これは、OpenSSL によって ( 経由で) 提供された予備検証結果を返しますbool preverified。細かい検証が必要な場合 (CN の一致など)、コールバックによって明示的に行う必要があります。

長い回答: OpenSSL (または OpenSSL の Boost ラッパー) が検証関数を呼び出すまでに、この場合はbool verify_certificate(bool preverified, boost::asio::ssl::verify_context& ctx)、一連の予備 (または必須) 検証が OpenSSL によって既に行われています。これはドキュメントで説明されています。

証明書チェーンは、最も深いネスト レベル (ルート CA 証明書) から始めて、ピアの証明書まで上方向にチェックされます。各レベルで、署名と発行者の属性がチェックされます。検証エラーが検出されるたびに、エラー番号が x509_ctx に格納され、verify_callback が preverify_ok=0 で呼び出されます。X509_CTX_store_* 関数を適用することにより、verify_callback は問題の証明書を見つけ、追加の手順を実行できます (例を参照)。証明書にエラーが見つからない場合、次のレベルに進む前に、preverify_ok=1 で verify_callback が呼び出されます。

ドキュメントには、よりきめ細かい検証コールバックを作成する方法の例も記載されています。ニーズに応じて、そこからインスピレーションを得ることができます。

編集: Boost の内部コールバック関数がアプリケーションのコールバック関数を呼び出す以外に特別なことをしていないことを確認するために、 OpenSSL を呼び出してコールバック関数をセットアップするC++ モジュールであるengine.ippを調べました。実装SSL_set_verify方法を見てみましょう。verify_callback_functionアプリケーションのコールバックを呼び出すだけです。

于 2013-09-29T16:20:12.423 に答える