我有需要验证的证书。我有一个提供信任的CA.两个证书都是现有的X509对象。
使用序列:
X509_STORE_CTX cert_ctx;
X509_STORE * trust = X509_STORE_new();
(load CA into trust)
X509_STORE_CTX_init(&cert_ctx, trust, cert, intermediates);
X509_verify_cert(&cert_ctx);
如果我使用以下方式加载证书:
BIO * bio = BIO_new_mem_buf(pem_data, pem_len);
X509 * cert = PEM_read_bio_X509_AUX(bio, 0, 0, 0);
X509_STORE_add_cert(trust, cert)
X509_verify_cert()
失败。如果我使用
X509_LOOKUP * lookup = X509_STORE_add_lookup(trust,X509_LOOKUP_file());
X509_LOOKUP_load_file(lookup, "..path..",X509_FILETYPE_PEM));
其中'路径'指向具有完全相同内容的文件,然后X509_verify_cert()
成功。
有没有办法在不使用查找功能的情况下将证书添加到信任存储区作为锚点?如果重要的话,我正在使用openssl 1.0.1
答案 0 :(得分:1)
对于遇到此问题的任何人。
X509_STORE_add_cert()
完全可以将证书添加到商店中。使用这样的商店作为信任锚列表来验证证书和证书链也是完美的。
当事情不起作用,双重和三重检查你提供了正确的根源。在我的例子中,添加到商店的实际证书不是根(但是当使用X509_LOOKUP_load_file
函数直接从文件加载时它被正确引用。)