【发布时间】:2017-03-02 00:32:01
【问题描述】:
我需要使用 OpenSSL 验证客户端证书。但是,我没有根证书(只有受信任的中间证书)。
我开始环顾四周,发现了几个链接:
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(中间证书)的所有错误。在这种情况下,如果客户端可以发送整个链,那么我不能只忽略错误,而是需要进行额外的验证。
附:我的实验表明 depth=1 是中间可信证书, depth=0 是客户端发送的证书。但是,这还没有定论。
【问题讨论】:
标签: ssl openssl certificate client-certificates