如何在没有查找功能的情况下将信任根提供给 openssl X509_STORE

How to supply trust roots into openssl X509_STORE without lookup functions

我有一个证书需要验证。我有一个提供信任的 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));

其中'path'指向内容完全相同的文件,则X509_verify_cert()成功。

有没有办法在不使用查找功能的情况下将证书作为锚点添加到信任库中?如果重要的话,我正在使用 openssl 1.0.1

对于遇到此问题的任何人。

X509_STORE_add_cert() 非常适合将受信任的证书添加到商店中。将此类存储用作验证证书和证书链的信任锚列表也完全没问题。

当出现问题时,仔细检查您提供的根目录是否正确。在我的例子中,添加到商店的实际证书不是根证书(但在使用 X509_LOOKUP_load_file 函数直接从文件加载时被正确引用)。