【问题标题】:Using openssl to check if root certificate in PKCS#7 is revoked使用 openssl 检查 PKCS#7 中的根证书是否被吊销
【发布时间】:2019-04-23 19:33:18
【问题描述】:

这是来自 C/C++ 库的pkcs7_verify 签名:

int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,
             BIO *indata, BIO *out, int flags);

它可以与 PKCS7 块 (p7) 和它要签名的部分(数据中)一起使用。

我想知道这个检查如何检测链中的一个证书是否被吊销......

据我所知,只有在与 pkcs7 块之外的另一个证书匹配时才能进行吊销检查,该证书被标记为已吊销。

我检查了函数参数,发现一个代表存储受信任证书列表的参数。

这个 arg 应该持有证书,它是 pkcs7 链中最低证书的颁发者。所以我的猜测是,如果这个证书被标记为已撤销,我们对revocation 原因的检查失败了......

但是如果链中更高的另一个证书被吊销怎么办?我如何将这条信息提供给pkcs7_verify

或者也许还有另一种 openssl 方法来决定链中的证书是否被吊销?

更新:

我找到了另一种检查证书是否被吊销的方法。在下面的示例中,我们可以看到revoked_test.pem 通过匹配crl_chain.pem 中的列表被识别为已撤销。我怎样才能以编程方式做到这一点?

openssl verify -crl_check -CAfile crl_chain.pem revoked-test.pem 
revoked-test.pem: OU = Domain Control Validated, OU = PositiveSSL, CN = xs4all.nl
error 23 at 0 depth lookup:certificate revoked

谢谢

【问题讨论】:

    标签: c++ c openssl x509certificate pkcs#7


    【解决方案1】:

    证书路径验证的大部分规则都设置在您传递给PKCS7_verify 函数的X509_STORE 结构中。

    This example 展示如何构建完整的 X509_STORE 并解释如何在 X509_STORE 中激活 CRL 验证。(该示例适用于设置 crl 验证,但不适用于证书链处理)

    核心功能是:

    • X509_STORE_set_flags
    • X509_STORE_add_crl
    • X509_STORE_add_lookup

    您使用X509_STORE_set_flags 告诉证书存储执行CRL 验证。您需要的标志是:X509_V_FLAG_CRL_CHECK_ALL | X509_V_FLAG_CRL_CHECK。您可以找到所有标志here

    您使用X509_STORE_add_crl 添加用于验证的 CRL。 CRL 不需要来自根 CA。

    作为X509_STORE_add_crl 的一个选项,您可以使用X509_STORE_add_lookup 添加一个函数来在任何地方(例如:文件系统、数据库、url 等)查找 CRL。

    执行链验证时,OpenSSl 将使用 X509_STORE 中的 CRL 和查找函数来验证链中的所有证书。如果链中的任何证书被吊销,则返回错误。

    补充一点很重要,the X.509 certification path validation 规范不包括对信任锚(通常是根证书)的验证。必须验证信任锚下的链中的所有证书,但信任锚是受信任的,因为验证者将其设置为如此(即:信任锚验证被验证者越界)。

    【讨论】:

    • 您好,非常感谢您的回复。我已经仔细阅读了您提供的文章,但我仍然无法弄清楚我们应该如何检测链中的证书之一是否被撤销(不是根证书)。该商店仅包含根证书列表,因此 pkcs7_verify 必须获得此信息,否则......也许您也可以详细说明一些理论上的解释?再次感谢!
    • X509_STORE 还包含用于验证的 CRL 和用于查找 CRL 的查找函数。我更新了答案以指出这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2013-04-21
    • 2016-11-13
    • 2018-01-15
    • 2012-03-25
    相关资源
    最近更新 更多