SSL_CTX_set_verify回调在哪里获得证书?

时间:2017-03-02 00:32:01

标签: ssl openssl certificate client-certificates

我需要使用OpenSSL验证客户端证书。但是,我没有根证书(只有可信中间证书)。

我开始环顾四周如何做到并发现了几个链接:

相当多的摘要是“设置一个回调(使用SSL_CTX_set_verify)并忽略此回调中的错误”。

将多次调用回调(对于链中的每个证书),文档说:

  

从最深的嵌套级别(根CA证书)开始检查证书链,并向上处理到对等方的证书。在每个级别检查签名和颁发者属性。

我的问题是OpenSSL在哪里获得这些证书链?它是来自客户端(意味着它们是不受信任的)还是来自受信任的商店(意味着它们是受信任的)。

在这种情况下,如果只有客户端证书来自客户端,我几乎可以忽略所有错误,其中深度> 0(中级证书)。在这种情况下,如果客户端可以发送整个链,那么我不能忽略错误,而是需要进行额外的验证。

P.S。我的实验表明,depth = 1是中间可信证书,depth = 0是客户端发送的证书。但是,这是不确定的。

1 个答案:

答案 0 :(得分:2)

整个链来自客户端,其中最重要的元素应该是您在removeFromSuperview()消息中表示信任的CA的元素。否则客户端不应发送任何内容(可能是空链)。

出于您的目的,您信任的任何证书都是根。因此,您需要做的就是确保在您自己的可信证书集中存在最顶层证书,然后继续对链进行正常验证。