如何在不使用查找函数的情况下向openssl X509_存储提供信任根

如何在不使用查找函数的情况下向openssl X509_存储提供信任根,openssl,x509,Openssl,X509,我有一个需要验证的证书。我有一个提供信任的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

我有一个需要验证的证书。我有一个提供信任的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\u verify\u cert()
失败。如果我使用

X509_LOOKUP * lookup = X509_STORE_add_lookup(trust,X509_LOOKUP_file());
X509_LOOKUP_load_file(lookup, "..path..",X509_FILETYPE_PEM));
如果“path”指向内容完全相同的文件,则
X509\u verify\u cert()
成功


有没有一种方法可以在不使用查找功能的情况下将证书作为锚添加到信任存储中?我正在使用openssl 1.0.1,如果它对任何遇到这个问题的人都很重要的话

X509\u STORE\u add\u cert()
非常适合将受信任的证书添加到存储中。使用这样的存储作为验证证书和证书链的信任锚列表也很好

当事情不起作用时,反复检查是否提供了正确的根。在我的例子中,添加到存储中的实际证书不是根证书(但使用
X509\u LOOKUP\u load\u file
函数直接从文件加载时,它被正确引用)