ssl - 配置 cURL 以在 Windows 上使用默认系统证书存储

标签 ssl curl openssl pem

我有一个命令行应用程序正在使用 libcurl-4 dll,目前我可以通过将我的 CA 证书放在我的工作目录中并将它们的名称传递给 CUTLOPT_CAINFO 来使一切正常工作。和 CURLOPT_SSLCERT./他们名字的前缀。

但是,我正在做的是让 cURL 不使用当前目录中的内容,而是使用存储在我的计算机系统存储中的证书。

通过阅读 cURL 的文档,我了解到,如果您在未提供指定默认值的情况下配置它 ca-bundleca-path它将“自动检测设置”。

而且 CURLOPT_CAINFO默认设置为“内置系统特定”

所以任何人都可以帮助我理解:

  1. 如果在配置 curl 时未指定任何内容,它会检测系统存储的默认路径吗?或者 curl 是否使用它自己的系统存储路径?

  2. 你给什么值curl_easy_setopt(m_curlHandle, CURLOPT_CAINFO, <value>)制作CURLOPT_CAINFO去使用它的默认值?

感谢任何帮助,因为我仍在学习这一切是如何工作的。

谢谢。

最佳答案

OpenSSL 不支持使用 Windows 自带的“CA 证书库”。如果您希望 curl 构建使用该证书存储,则需要重建 curl 以改为使用 schannel 后端(也称为“winssl”),这是默认情况下也使用 Windows 证书存储的 Windows native 版本。

如果您决定继续使用 OpenSSL,您必须简单地在 PEM 文件或特制目录中提供 CA 证书,因为 Windows 不提供使用该格式的系统存储,您必须从某个地方获得合适的存储或弄清楚如何将 Windows 证书存储转换为 PEM 格式。

更新

从 libcurl 7.71.0 开始,定于 2020 年 6 月 24 日发布,它将能够在构建为使用 OpenSSL 时使用 Windows CA 证书存储。然后您需要使用 CURLOPT_SSL_OPTIONS选项并在位掩码中设置正确的位:CURLSSLOPT_NATIVE_CA。

关于ssl - 配置 cURL 以在 Windows 上使用默认系统证书存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37551409/

相关文章:

php - 使用 php 将图像上传到 imgur

c - 以 DER 格式编写私钥/公钥

ssl - 服务器如何加密? (特别是 openSSL)

android - 果冻 bean 的客户端证书错误

php - curl_multi_select 总是阻塞超时值

node.js - 如何使用 .pfx 类型的证书修复 nodejs 中缺少的中间/链证书

linux - 管道参数 : echo "value1 value2" | command $1 $2

Grails 2.4.x 在运行时设置 keystore

java - 收到致命警报:SSLHandshakeException中的handshake_failure

java - 在 Android Studio 中下载用于 HTTPs 的自签名证书