OpenSSL API:CRL检查不起作用

时间:2016-05-08 15:17:57

标签: security ssl openssl

我正在尝试添加到我的X509_store,CRL管理。 我做到了:

int x509_add_crl_to_store( X509_STORE * store, const char * crl_file ){
STACK_OF(X509_CRL) *crls = 0;
X509_CRL *x;

CHK(!store, SSL_FAIL);

if (X509_STORE_set_default_paths(store) != 1){
    MITM_PRINT_ERR("Error loading the system-wide CA certificates");
    return SSL_FAIL;
}

if(load_crls_from_PEM(crl_file, &crls) != 1)
{
    MITM_PRINT_ERR("load_crls_from_PEM failed.");
    return SSL_FAIL;
}

while((x=sk_X509_CRL_pop(crls)) != 0){
    if(X509_STORE_add_crl(store,x) != 1){
        MITM_PRINT_ERR("Failed to add CRL to store.");
        return SSL_FAIL;
    }
    else{
        MITM_PRINT_ERR("Succedded to add CRL to store.");
    }
}

/* set the flags of the store so that CRLs are consulted */
//X509_STORE_set_flags(store, X509_V_FLAG_CRL_CHECK | X509_V_FLAG_CRL_CHECK_ALL| X509_V_FLAG_TRUSTED_FIRST);

return SSL_OK; }

问题是:

  • 如果我启用最后一行:

    X509_STORE_set_flags(存储,X509_V_FLAG_CRL_CHECK | X509_V_FLAG_CRL_CHECK_ALL);

所以CRL检查正在运行但是不再检查可信商店了。

当然,如果我禁用这些行,则可信CA检查正在运行,但不是CRL。

任何想法???

由于 的Mikael

1 个答案:

答案 0 :(得分:0)

将CRL标志X509_V_FLAG_CRL_CHECK_ALLX509_V_FLAG_CRL_CHECK结合使用时应非常小心,因为两者的综合效果是要求存在每个 CRL对应于信任链中的所有CA.因此,如果您将CA证书Verisign.pem添加到信任存储区,并且它是信任链​​的一部分,则必须添加CRL Verisign_CRL.pem

在您的特定情况下,您已使用/etc/ssl/certsX509_STORE_set_default_paths(store)目录中添加了所有证书。要使验证正常工作,您需要添加与该目录中您希望成为链的一部分的每个CA对应的CRL。

更好的方法是将您的CA列表缩小到您拥有CRL的CA列表,然后使用X509_STORE_add_cert(store, ca_cert)单独添加它们。