OpenSSL区分自签名的可信CA证书

时间:2015-10-23 06:59:58

标签: c++ authentication openssl cryptography

我目前正在为现有应用程序开发身份验证插件。根据协议,插件应允许仅由受信任的CA 签名的证书。所有自签名证书都应被视为无效。我生成了一个自签名证书,也有一个由受信任的机构签名的证书。我还实现了两个不同的函数,用于验证自签名证书和可信证书以进行测试。

我的问题是,应该验证受信任证书的函数也会验证我的自签名证书。您可以在下面看到我的实施:

FILE* certificate_file = fopen("cert.cer", "r");
X509* certificate = PEM_read_X509(certificate_file, NULL, NULL, NULL);

X509_STORE* store = X509_STORE_new();
X509_STORE_CTX* ctx = X509_STORE_CTX_new();

X509_STORE_add_cert(store, certificate);
X509_SORE_CTX_init(ctx, store, certificate, NULL);

X509_verify_cert(ctx);

我错过了什么?有人说证书链,但在大多数示例中,参数只是 NULL 。还有一些其他的实现,但它们要么太复杂,要么没有真正回答我的问题。

为了避免任何误解,我希望当自签名证书作为输入时,此函数返回无效。

1 个答案:

答案 0 :(得分:1)

您似乎缺少的是受信任的证书存储的概念。受信任的商店包含您明确信任的证书。现在,如果您只使用根证书创建一个(例如,从浏览器的信任存储中获取),则只会信任具有中间CA证书和您自己的证书的链。由于您的自签名证书不在信任存储区中,因此它不受信任,因为该链仅为1个证书,并且不会返回到信任存储区。

因此,您将维护两个信任库:一个用于具有自签名证书的测试环境,另一个用于使用根CA或中间CA证书进行实际部署以验证最终用户证书。