OpenSSL区分受信任CA证书和自签名CA证书
OpenSSL Differentiating Trusted CA Certificates From Self-Signed Ones
我目前正在为一个现有的应用程序的身份验证插件。根据协议,插件只允许由可信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。还有其他一些实现,但它们要么太复杂,要么不能真正回答我的问题。
为了避免任何误解,我希望这个函数在给出自签名证书作为输入时返回invalid。
您似乎忽略了可信证书存储的概念。可信存储区包含您显式信任的证书。现在,如果你只创建一个根证书(例如,从浏览器的信任存储中获取),只有中间CA证书和你自己的证书链将被信任。由于您的自签名证书不在信任存储库中,因此它将不受信任,因为该链只有一个证书大小,并且它不会导致返回信任存储库。
因此,您将维护两个信任存储库:一个用于带有自签名证书的测试环境,另一个用于带有根或中间CA证书的实际部署,以验证您的最终用户证书。
相关文章:
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 如何在C++中使用X509证书模在令牌中查找私钥
- OpenSSL TLS服务器-使用客户端证书白名单
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- c++ libCurl :如何使用libCurl接受过期的证书
- 以 x64 配置访问证书公钥
- 从网站复制证书,并使用脚本将其添加到受信任的根证书颁发机构
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- 我需要帮助来缩短检索 SSL 证书的执行时间
- 如何使用QWebEngineView忽略SSL证书错误
- 如何以编程方式从PKCS7中提取CA、多个CA和公共证书/密钥
- 通过 OpenSSL C++从证书获取颁发者证书
- 如何使用openssl续订过期的证书密钥或创建自签名证书密钥any.pem Poco c ++
- 打开 SSL 查询客户端证书
- 使用CA证书我自己的代码
- 使用libcurl的CA证书身份验证
- OpenSSL区分受信任CA证书和自签名CA证书
- 服务器证书验证失败.CAfile: ca.pem CRLfile:无
- 从内存加载CA证书