我正在尝试添加到我的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
答案 0 :(得分:0)
将CRL标志X509_V_FLAG_CRL_CHECK_ALL
与X509_V_FLAG_CRL_CHECK
结合使用时应非常小心,因为两者的综合效果是要求存在每个 CRL对应于信任链中的所有CA.因此,如果您将CA证书Verisign.pem
添加到信任存储区,并且它是信任链的一部分,则必须添加CRL Verisign_CRL.pem
。
在您的特定情况下,您已使用/etc/ssl/certs
在X509_STORE_set_default_paths(store)
目录中添加了所有证书。要使验证正常工作,您需要添加与该目录中您希望成为链的一部分的每个CA对应的CRL。
更好的方法是将您的CA列表缩小到您拥有CRL的CA列表,然后使用X509_STORE_add_cert(store, ca_cert)
单独添加它们。