【问题标题】:Where does SSL_CTX_set_verify callback get certificates?SSL_CTX_set_verify 回调在哪里获取证书?
【发布时间】:2017-03-02 00:32:01
【问题描述】:

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

我开始环顾四周,发现了几个链接:

基本上总结是“设置回调(使用SSL_CTX_set_verify)并忽略此回调中的错误”。

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

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

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

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

附:我的实验表明 depth=1 是中间可信证书, depth=0 是客户端发送的证书。但是,这还没有定论。

【问题讨论】:

    标签: ssl openssl certificate client-certificates


    【解决方案1】:

    整个链来自客户端,其中最顶层的元素应该是您在CertificateRequest 消息中说您信任的 CA。否则客户端不应该发送任何东西(可能是一个空链)。

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

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 2013-08-22
      • 2012-07-13
      • 2014-04-13
      • 2019-05-02
      • 2016-04-24
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多