用于验证来自私有(private) CA 的证书的客户端程序?

标签 c ssl openssl x509 pki

我有一个使用 OpenSSL 库的 C 程序,它使用 SSL/TLS 建立到 httpbin.org 的连接。客户端程序能够与服务器建立连接。

现在,我想连接到我自己的服务器,其证书由我们自己的私有(private)或内部 CA 签名。在客户端,我想强制 OpenSSL 使用我们自己的 CA 进行证书验证。所以,我的问题是:

如何使用库加载我自己的 CA 证书并强制它仅使用该 CA 来验证服务器证书?

最佳答案

可以通过多种方式指定应该使用哪个 CA 进行验证,具体取决于您拥有 CA 的方式(即 X509 结构列表、单个文件、带证书的目录...)。由于最后一点在问题中没有详细说明,我将答案限制为最简单的情况:单个 CA 或单个文件中 PEM 格式的 CA 列表。可以使用 SSL_CTX_verify_location 将此文件设置为唯一用于验证的 CA 存储:

 SSL_CTX_load_verify_locations(ctx, "ca.pem", NULL);

有关更多信息(如错误处理),请参阅 the documentionexamples on how to use it .

关于用于验证来自私有(private) CA 的证书的客户端程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40061815/

相关文章:

c - 如何有意创建 .dep 文件?

c - 为什么未初始化的内存可以安全地用于 OpenSSL 的随机数生成器?

php - 避免在 openssl_sign/sign 给定哈希中使用 SHA1 哈希

WCF net.tcp 与 ssl

c - 混合 openssl API 和 BSD sockets API

c - 断言失败

c - 动态数组的可变参数函数?

似乎无法弄清楚这里发生了什么

java - 如何编写在它们之间使用相互 ssl 身份验证的 java 客户端和服务器应用程序?

WordPress SSL 404 和重定向