我有一个使用libcurl-4
dll的命令行应用程序,目前我可以通过将我的CA证书放在我的工作目录中并将其名称传递给CUTLOPT_CAINFO
和{ {1}}名称前缀为CURLOPT_SSLCERT
前缀。
但是,我正在努力的是让cURL不使用当前目录中的内容,而是使用存储在我的计算机系统存储中的证书。
通过阅读cURL的文档,我了解如果您在没有指定默认./
或ca-bundle
的情况下进行配置,则ti将“自动检测设置”。
默认情况下ca-path
设置为“内置系统特定”
所以任何人都可以帮助我理解:
如果在配置时没有使用curl指定任何内容,它是否检测到系统存储的默认路径?或卷曲是否使用自己的路径进行系统存储?
您将CURLOPT_CAINFO
赋予什么价值才能使{1}}使用其默认值?
任何帮助都表示赞赏,因为我仍在学习这一切是如何运作的。
谢谢。
答案 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.exe
或PowerShell.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