OpenSSLを使用してクライアント証明書を検証する必要があります。しかし、私はルート証明書(信頼できる中間証明書のみ)を持っていません。SSL_CTX_set_verifyコールバックはどこで証明書を取得しますか?
私はそれを行う方法を見て回るを開始し、いくつかのリンクが見つかりました:かなりの要約は、「使用して(コールバックを設定されている
http://openssl.6102.n7.nabble.com/Terminate-chain-at-intermediate-certificate-td6815.html
how to validate a client Certificate using the trusted internediate CA certificate?
をSSL_CTX_set_verify
)、このコールバックのエラーを無視します。 "
コールバックが(チェーン内の各証明書のために)複数回呼び出され、ドキュメントは言う:
証明書チェーンが最も深いネストレベル(ルートCA証明書)で始まる確認し、上向きに加工されていますピアの証明書に追加します。各レベルで、署名と発行者の属性がチェックされます。
私の質問は、OpenSSLがこれらの証明書チェーンを取得する場所ですか?クライアントから取得したもの(信頼できないことを意味する)か、信頼できるストアから取得したもの(信頼されていることを意味します)。
この場合、クライアント証明書だけがクライアントから送られた場合、深さ> 0(中間証明書)のすべてのエラーを無視できます。この場合、クライアントがチェーン全体を送信できる場合は、エラーを無視するだけでなく、追加の検証を行う必要があります。
P.S.私の実験では、depth = 1は中間の信頼できるcert、depth = 0はクライアントから送信された証明書です。しかし、これは決定的ではない。