我使用的是 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
.