4

デフォルトの証明書検証手順を、( SSL_CTX_set_cert_verify_callbackを介して) Windows システム ストアを使用する手順でオーバーライドすることを検討しています。アプリケーションは Web クライアントであり、システム ストアに追加された全社的な自己署名証明書を受け入れる必要があります。

(おそらく不完全な)チェーンができたら、私は

  • インメモリ WinCrypt ストアを作成し、
  • サーバー提供のチェーン(最終証明書を除く)をそれに追加します
  • 一時ストアとシステム ストアから WinCrypt を使用して完全なチェーンを構築する
  • WinCrypt を使用してチェーンを検証する (SSL オブジェクトからサーバー名の値を渡す)

ただし、X509_STORE_CTX_get1_chain()は、 X509_verify_cert()の実行後にのみ使用できる信頼できるチェーンを返します。

私が必要としているのは X509_STORE_CTX::untrusted (これにはハンドシェイクからの証明書のみがあります) ですが、明らかに API 経由でエクスポートされていません。

最終証明書を WinCrypt に渡すこともできますが、それは回避したい中間証明書をダウンロードすることを意味します。

私の質問は、私は逆のことをしていますか? openssl にチェーンを構築させて検証を実行させてから、 WinCrypt を使用してやり直す必要がありますか? それはひどいようです。X509_STORE_CTX_get_untrusted() 関数を追加して、libeay32.dll を再構築することはできますが、そうはしません。

4

1 に答える 1

2

私の知る限り、デフォルトの検証関数はX509_verify_certです。この関数は、独自の検証コールバック ( を使用) を設定しない場合に呼び出されますSSL_CTX_set_cert_verify_callback。これはcrypto/x509/x509_vfy.cで定義されています。この関数のソース コードを調べて、OpenSSL が連携するように説得するために正確に何をすべきかを理解することをお勧めします (たとえば、エラー コードを適切に返すなど)。

それが役立つことを願っています。

PSあなたが正しいように見えます.のアクセサ関数があるためX509_STORE_CTX::untrusted、OpenSSLの「プライベート」なものである可能性があります。X509_verify_certこの変数では、直接アクセスするだけです。

于 2013-01-16T22:53:49.743 に答える