【问题标题】:Configure cURL to use default system cert store on Windows配置 cURL 以在 Windows 上使用默认系统证书存储
【发布时间】:2016-09-29 19:16:34
【问题描述】:

我有一个使用libcurl-4 dll 的命令行应用程序,目前我可以通过将我的CA 证书放在我的工作目录中并将它们的名称传递给CUTLOPT_CAINFOCURLOPT_SSLCERT 与@ 987654324@ 为其名称添加前缀。

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

通过阅读 cURL 的文档,我了解到,如果您在未指定默认 ca-bundleca-path 的情况下对其进行配置,那么 ti 将“自动检测设置”。

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

那么谁能帮我理解一下:

  1. 如果在配置时没有指定 curl,它检测系统存储的默认路径是什么?还是 curl 使用自己的系统存储路径?

  2. 你给curl_easy_setopt(m_curlHandle, CURLOPT_CAINFO, *<value> )什么值来让CURLOPT_CAINFO使用它的默认值?

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

谢谢。

【问题讨论】:

    标签: ssl curl openssl pem


    【解决方案1】:

    OpenSSL 不支持使用 Windows 自己拥有的“CA 证书存储”。如果您希望您的 curl 构建使用该证书存储,则需要重新构建 curl 以使用 schannel 后端(又名“winssl”),这是默认情况下也使用 Windows 证书存储的 Windows 本机版本。

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

    更新

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

    【讨论】:

    • 是的,谢谢您的帮助。昨天晚些时候,我发现 OpenSSL 不支持系统存储,并且已经构建了 cURL 以使用 winssl。但是,我现在遇到了 SSL/TLS 握手问题并接收到 http 错误 35。在阅读完 schannel.c 文件后,我偶然发现了我认为 schannel 不想发送客户端证书的问题。 (见第 495 行)
    • 2018年还是这样吗? OpenSSL 无法访问 Windows 证书存储区?这听起来很荒谬
    • 我相信它仍然是真的,是的。
    • 带有 winssl / schannel 后端的 libcurl 与带有“Git for Windows”的 Windows 证书存储一起开箱即用(请参阅stackoverflow.com/questions/16668508/…)。但是,我不知道如何以及是否可以在命令行可执行文件上配置 ssl 后端。
    • 似乎自 2018 年 4 月起包含在 Windows 10 中。
    【解决方案2】:

    自 2018 年 4 月起,对于想要使用 Windows 命令行下载文件的用户,可以使用 Curl.exe 可执行文件。从 Windows 10 build 17063 及更高版本开始,包含 Curl 以便您可以直接从 Cmd.exePowerShell.exe 执行它。

    curl.exe -V
    curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
    Release-Date: [unreleased]
    Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp 
    Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL 
    

    小心使用 PowerShell Cmdlet Invoke-WebRequest 使用名称 curl 进行别名处理,因此请将此 CmdLet (Remove-item alias:curl) 取消别名或显式使用 curl.exe。

    据我了解,curl.exe 是使用 Schannel(微软的原生 TLS 引擎)构建的,然后 libcurl 仍然执行对等证书验证,但它不使用 CA 证书包,而是使用操作系统中内置的证书.

    curl.exe  "https://www.7-zip.org/a/7z1805-x64.exe"  --output c:\temp\7zip.exe
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100 1404k  100 1404k    0     0  1404k      0  0:00:01 --:--:--  0:00:01 9002k
    

    【讨论】:

      猜你喜欢
      • 2012-03-19
      • 2023-04-06
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2014-03-10
      • 2011-11-27
      相关资源
      最近更新 更多