2017-03-02 12 views
1

OpenSSLを使用してクライアント証明書を検証する必要があります。しかし、私はルート証明書(信頼できる中間証明書のみ)を持っていません。SSL_CTX_set_verifyコールバックはどこで証明書を取得しますか?

私はそれを行う方法を見て回るを開始し、いくつかのリンクが見つかりました:かなりの要約は、「使用して(コールバックを設定されている

SSL_CTX_set_verify)、このコールバックのエラーを無視します。 "

コールバックが(チェーン内の各証明書のために)複数回呼び出され、ドキュメントは言う:

証明書チェーンが最も深いネストレベル(ルートCA証明書)で始まる確認し、上向きに加工されていますピアの証明書に追加します。各レベルで、署名と発行者の属性がチェックされます。

私の質問は、OpenSSLがこれらの証明書チェーンを取得する場所ですか?クライアントから取得したもの(信頼できないことを意味する)か、信頼できるストアから取得したもの(信頼されていることを意味します)。

この場合、クライアント証明書だけがクライアントから送られた場合、深さ> 0(中間証明書)のすべてのエラーを無視できます。この場合、クライアントがチェーン全体を送信できる場合は、エラーを無視するだけでなく、追加の検証を行う必要があります。

P.S.私の実験では、depth = 1は中間の信頼できるcert、depth = 0はクライアントから送信された証明書です。しかし、これは決定的ではない。

答えて

2

チェーン全体がクライアントから提供され、その最上位の要素は、CertificateRequestメッセージで信頼するというCAのものである必要があります。さもなければ、クライアントは何も送っていないはずです(おそらく空のチェーン)。

信頼できる証明書はルートです。したがって、信頼できる証明書セットに最上位の証明書が存在することを確認してから、チェーンの通常の検証を続けるだけです。

関連する問題