2016-03-18 1 views
0

SSL_CTX_set_cert_verify_callbackを使用してコールバックを登録すると、コールバックを取得します。 ctxにはcertが含まれていますが、クライアントが送信したcertチェーン全体を見つけることはできません。誰でもctxのどの分野がそれを持っているか知っていますか?または完全な検証を行うためにどのように取得することができますか?チェーンリストを取得するSSL_CTX_set_cert_verify_callback

SSL_CTX_set_cert_verify_callback(ctx, ssl_app_verify_callback, NULL); 

おかげで...クライアント証明書

+1

クライアントは相互認証を使用するときにチェーンを送信しません。サーバーは、どの発行者***がクライアント証明書を受け入れるかを通知します。クライアントは、Issuerによって証明されたクライアント証明書を選択することによって応答し、ある証明書を送信します(何らかの手を放棄する)。見つからなければ、ハンドシェークは通常、TLS Alert 40で終了します。 – jww

答えて

0

検証コールバックが

  • OpenSSLがどのクライアントに基づいてチェーンを構築しますつまり、サーバ証明書のためのコールバックと同じように動作しますsendと、サーバがローカルCAパスとして知っているものがあります。
  • チェーンの各部分について、検証コールバックが呼び出されます。これは、クライアントが証明書チェーンを送信していなくても、信頼チェーンの一部であるローカル証明書に対してコールバックが呼び出されることを意味します。クライアントがそれらを送信したとしても、チェーンの一部ではない証明書に対してコールバックは呼び出されません。

クライアントがチェーン証明書を送信する場合は、クライアントによって異なります。しかし、これを不可能にする規格には何もなく、クライアントがリーフ証明書とチェーン証明書の両方を送ることができるようにするためには、openssl s_client -cert leaf.pem -CAfile chain.pem ...を使うことができます。

0

クライアントによって送信された証明書のチェーンは、信頼ストアの一部ではないため「信頼できない」とみなされる証明書のスタックであるctx->untrusted構造に格納されます。 opensslは証明書チェーンの検証プロセスを実行中に自動的にそれを使用するため、実際にはこのチェーンにアクセスする必要はありません。実際には、予期せぬ結果を招く可能性があるため、これを変更する際には注意が必要です。構造体の変更に注意するopensslフォーラムのthisスレッドを参照してください。

関連する問題