デフォルトの証明書検証手順を、( 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 を再構築することはできますが、そうはしません。