我有一个命令行应用程序正在使用 libcurl-4
dll,目前我可以通过将我的 CA 证书放在我的工作目录中并将它们的名称传递给 CUTLOPT_CAINFO
来使一切正常工作。和 CURLOPT_SSLCERT
与 ./
他们名字的前缀。
但是,我正在做的是让 cURL 不使用当前目录中的内容,而是使用存储在我的计算机系统存储中的证书。
通过阅读 cURL 的文档,我了解到,如果您在未提供指定默认值的情况下配置它 ca-bundle
或 ca-path
它将“自动检测设置”。
而且 CURLOPT_CAINFO
默认设置为“内置系统特定”
所以任何人都可以帮助我理解:
如果在配置 curl 时未指定任何内容,它会检测系统存储的默认路径吗?或者 curl 是否使用它自己的系统存储路径?
你给什么值
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/