`curl` 如何在 macOS 中访问 SSL 证书?

`curl` 如何在 macOS 中访问 SSL 证书?

我使用的是 macOS 10.15.5 的 Macbook。我有 MacPorts,但我使用的是curl.

% curl --version
curl 7.64.1 (x86_64-apple-darwin19.0) libcurl/7.64.1 (SecureTransport) LibreSSL/2.8.3 zlib/1.2.11 nghttp2/1.39.2
Release-Date: 2019-03-27
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS GSS-API HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz MultiSSL NTLM NTLM_WB SPNEGO SSL UnixSockets

当我尝试 d/l 最新的时youtube-dl,我收到证书错误:

% sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (60) SSL certificate problem: certificate has expired
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

我确实查看了“上述网页”,但没有找到解决方案。 GitHub 上的 youtube-dl 维护者坚称他们的证书是有效的且是最新的。他们提供了这份文件作为“答案”,但我发现其中没有任何用处。curl能够毫无问题地下载其他 SSL 网页,因此我认为该问题是该证书/网站所特有的。

我从来没有遇到过这个问题。我有一台装有 Mojave 的旧版 Macbook - 我已经更新或重新安装了youtube-dl好几次,没有出现任何问题,但现在也失败了。不过,我可以curl在我的 Ubuntu Linux 机器上运行相同的命令,而且效果很好。我不得不猜测这意味着两台 Mac 都“缺少了一些东西”——Mojave Mac 曾经拥有但已被删除的东西。

我需要对 Mac 执行什么操作才能curl处理 SSL 证书?

答案1

据报道,这似乎是证书过期和 LibreSSl 的问题https://curl.haxx.se/mail/lib-2020-06/0010.html。可能的解决方法是

  • curl -k在受影响的网站上使用。但这会禁用证书检查,因此存在一些风险
  • (卡特琳娜上)套装CURL_SSL_BACKEND=secure-transport
  • (在所有 macOS 版本上)运行brew install curl并设置 PATH 以使用以下命令获取自制版本export PATH="/usr/local/opt/curl/bin:$PATH"

PS:您也可以按照以下说明尝试加载新证书https://curl.haxx.se/docs/caextract.html但即使在加载它们后我也遇到了同样的错误。

聚苯醚:https://security.stackexchange.com/questions/232445/https-connection-to-specific-sites-fail-with-curl-on-macos有关于此的更多信息,包括替代解决方案,例如AddTrust/etc/ssl/cert.pem.

相关内容