【发布时间】:2016-10-15 16:58:57
【问题描述】:
我有一个使用 OpenSSL 库的 C 程序来使用 SSL/TLS 建立到 httpbin.org 的连接。客户端程序能够与服务器建立连接。
现在,我想连接到我自己的服务器,其证书由我们自己的私有或内部 CA 签名。在客户端,我想强制 OpenSSL 使用我们自己的 CA 进行证书验证。所以,我的问题是:
如何使用该库加载我自己的 CA 证书并强制它仅使用该 CA 来验证服务器证书?
【问题讨论】:
我有一个使用 OpenSSL 库的 C 程序来使用 SSL/TLS 建立到 httpbin.org 的连接。客户端程序能够与服务器建立连接。
现在,我想连接到我自己的服务器,其证书由我们自己的私有或内部 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 documention 和 examples on how to use it。
【讨论】:
SSL_CTX_verify_location ,看来我的原始答案至少对 OP 有足够的帮助。