配置cURL以使用默认系统证书存储

时间:2016-05-31 16:48:00

标签: ssl curl openssl pem

我有一个使用libcurl-4 dll的命令行应用程序,目前我可以通过将我的CA证书放在我的工作目录中并将其名称传递给CUTLOPT_CAINFO和{ {1}}名称前缀为CURLOPT_SSLCERT前缀。

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

通过阅读cURL的文档,我了解如果您在没有指定默认./ca-bundle的情况下进行配置,则ti将“自动检测设置”。

默认情况下ca-path设置为“内置系统特定”

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

  1. 如果在配置时没有使用curl指定任何内容,它是否检测到系统存储的默认路径?或卷曲是否使用自己的路径进行系统存储?

  2. 您将CURLOPT_CAINFO赋予什么价值才能使{1}}使用其默认值?

  3. 任何帮助都表示赞赏,因为我仍在学习这一切是如何运作的。

    谢谢。

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

自2018年4月起,对于那些想要使用Windows命令行下载文件的用户,可以使用Curl.exe可执行文件。在Windows 10内部版本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(Microsoft的本机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