Curl

curl 如何在 macOS 中訪問 SSL 證書?

  • June 10, 2020

我在裝有 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 the latestyoutube-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 證書?

根據https://curl.haxx.se/mail/lib-2020-06/0010.html,這似乎是過期證書和 LibreSSl 的問題。可能的解決方法是

  • curl -k在受影響的網站上使用。不過,這會禁用證書檢查,因此存在一些風險
  • (卡塔利娜)套裝CURL_SSL_BACKEND=secure-transport
  • (在所有 macOS 版本上)執行brew install curl並設置 PATH 以獲取 homebrew 版本export PATH="/usr/local/opt/curl/bin:$PATH"

PS:您也可以按照https://curl.haxx.se/docs/caextract.html上的說明嘗試載入新證書,但即使在載入它們後我也遇到了同樣的錯誤。

PPS:https ://security.stackexchange.com/questions/232445/https-connection-to-specific-sites-fail-with-curl-on-macos在這方面有更多內容,包括替代解決方案,例如AddTrust/etc/ssl/cert.pem.

引用自:https://unix.stackexchange.com/questions/591211