代码之家  ›  专栏  ›  技术社区  ›  Zohar81

使用openssl检查pkcs 7中的根证书是否被吊销

  •  3
  • Zohar81  · 技术社区  · 7 年前

    这里是 pkcs7_verify 从C/C++库获取的签名:

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

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

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

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

    我检查了函数参数,找到了一个表示存储信任证书列表的参数。

    这个arg应该持有pkcs7链中最低级证书的颁发者证书。所以我猜如果这个证书被标记为吊销,我们的检查就失败了 revocation 原因…

    但是,如果链中更高级别的另一个证书被吊销呢?我该如何向 PKCS7L验证 ?

    或者可能有另一个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
    

    谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Lucas Martins    7 年前

    认证路径验证的大多数规则都设置在 X509_STORE 您要传递到的结构 PKCS7_verify 功能。

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

    其核心功能是:

    • X509_STORE_set_flags
    • X509_STORE_add_crl
    • X509_STORE_add_lookup

    你使用 x509_store_set_标志 通知证书存储执行CRL验证。您需要的标志是: X509_V_FLAG_CRL_CHECK_ALL | X509_V_FLAG_CRL_CHECK .你可以找到所有的旗子 here .

    你使用 x509_存储\u添加\u crl 为验证添加CRL。crl不需要来自根CA。

    作为 x509_存储\u添加\u crl 你有 x509_store_add_查找 ,添加在任何位置查找CRL的函数(例如:文件系统、数据库、URL等)。

    在执行链验证时,openssl将使用x509_存储中的crls和查找函数来验证链中的所有证书。如果链中的任何证书被吊销,则返回错误。

    这一点很重要 the X.509 certification path validation 规范不包括信任锚(通常是根证书)的验证。必须验证信任锚下链中的所有证书,但信任锚是受信任的,因为验证器将其设置为受信任的(即:信任锚验证超出了验证器的范围)。