首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenSSL C API CRL检查

OpenSSL C API CRL检查
EN

Stack Overflow用户
提问于 2014-10-06 14:31:32
回答 1查看 4K关注 0票数 3

我正在尝试使用CertificatePathValidation C API编写OpenSSL测试。我目前还在测试被撤销的中级证书(ca-)证书。有两个测试用例: 1. EndCert被撤销,2. SubCACert被撤销。我的代码的一部分:

代码语言:javascript
复制
FILE* fl = NULL;
int i;
for(i=0; i<crl_count; i++){
  fl = fopen(pem_crl_files[i],"r");
  x509 = PEM_read_X509_CRL(fl, NULL,0,NULL);
  X509_STORE_add_crl(store, x509);
  fclose(fl); 
}
X509_STORE_set_flags(store, X509_V_FLAG_CRL_CHECK);

所以现在当我使用X509_V_FLAG_CRL_CHECK标志时,测试用例1工作正常,测试用例2失败(返回cert是有效的)。如果我使用X509_V_FLAG_CRL_CHECK_ALL标志,情况1和2都会失败。有人知道我错过了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2014-10-06 15:32:10

此设置的行为与文档显示的略有不同:

  • X509_V_FLAG_CRL_CHECK支持CRL检查。如果这个选项,如果关闭,没有检查将被完成。
  • 如果还设置了X509_V_FLAG_CRL_CHECK_ALL,则将检查整个链,否则只检查叶证书。

这意味着您需要同时设置两个X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL

来自OpenSSL 1.0.1e的相关代码,文件crypto/x 509/x509_vfy.c:

代码语言:javascript
复制
669 static int check_revocation(X509_STORE_CTX *ctx)
670         {
671         int i, last, ok;
672         if (!(ctx->param->flags & X509_V_FLAG_CRL_CHECK))
673                 return 1;
674         if (ctx->param->flags & X509_V_FLAG_CRL_CHECK_ALL)
675                 last = sk_X509_num(ctx->chain) - 1;

如您所见,如果没有设置X509_V_FLAG_CRL_CHECK,它将跳过第672,673行中的整个吊销检查。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26218495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档