gpt4 book ai didi

macos - macOS 上的 wget 如何处理证书?

转载 作者:行者123 更新时间:2023-12-04 22:35:25 24 4
gpt4 key购买 nike

操作系统:macOS Big Sur

应用程序:wget/openssl1.1 都通过 brew

我想通过 https 使用 wget 从网络服务器下载一些文件,但我收到错误消息:无法在本地验证发行者的权限。 但是,我可以使用 curl 连接到该服务器macOS 自带。当然我可以使用 --no-check-certificate,但我想了解背景并以正确的方式进行。

据我了解,curl 使用 macOS 的 libressl,而 wget 使用 openssl 作为后端。对于 wget,我尝试将所有系统根证书作为 pem 文件从钥匙串(keychain)中导出,并通过 --ca-certificate 将此 pem 文件传递​​给 wget。还是一样的错误。

为什么curl不做任何事都能验证证书而wget却不行?

╰─$ brew info openssl
openssl@1.1: stable 1.1.1i (bottled) [keg-only]
Cryptography and SSL/TLS Toolkit
https://openssl.org/
/usr/local/Cellar/openssl@1.1/1.1.1i (8,067 files, 18.5MB)
Poured from bottle on 2021-01-28 at 07:11:37
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/openssl@1.1.rb
License: OpenSSL
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
/usr/local/etc/openssl@1.1/certs

and run
/usr/local/opt/openssl@1.1/bin/c_rehash

openssl@1.1 is keg-only, which means it was not symlinked into /usr/local,
because macOS provides LibreSSL.

编辑:这是我到目前为止尝试过的:

  • 通过系统 curl 下载 -> 没问题
  • 通过 brew 安装(并重新安装)curl 和 wget(openssl 作为依赖项)-> 两者都无法验证证书,尽管它是一个普通的根 CA 证书,而通过 brew 的 OpenSSL 声称将所有这些证书导出到它自己的存储中。
  • 带有详细选项的系统 curl 表示它使用 /etc/ssl/cert.pem 进行查找,因此我尝试通过 --cacert 传递此文件 resp . --ca-certificate 到 curl/wget -> 同样的错误。
  • 我还尝试以 pem 格式显式导出根 CA 并继续传递,但仍然无法正常工作
  • 通过 openssl 手动下载站点的证书:openssl s_client -showcerts -servername domain -connect domain,将证书另存为 .pem 并与 wget -> works 一起使用
  • 我还检查了根 ca 'Digicert Global Root CA' 的证书 key 是否存在于 /etc/ssl/cert.pem 以及 openssl 的 /usr/中本地/etc/openssl@1.1/cert.pem

我仍然不明白为什么当通过 brew 的 OpenSSL 应该在安装期间将所有根 CA 导出到它自己的存储时它不起作用。

最佳答案

您的帖子中没有足够的信息来确定确切的问题,但这里有一些建议可能会帮助您转发:

  • 下载服务器的证书包并使用 the openssl verify command 在本地分析其验证.
  • 杠杆 the openssl s_client command直接建立与服务器的 TLS 连接并检查记录的信息,或使用其 debug 选项进行更深入的挖掘。它有一个未记录的调试选项 -security_debug_verbose 可能会有所帮助。如果您的 OpenSSL 是使用 enable-ssl-trace 选项构建的(brew 公式不是这种情况),您可以使用 -trace 选项以获得更多输出。
  • 使用 -v 或一些 --trace 标志运行 curl 以更深入地了解其验证行为。

您可以使用 opensslcurl 的 OpenSSL 和 LibreSSL 版本执行所有这些操作,并观察它们之间的差异。 curlopenssl 版本可以用 brew 安装。

您还可以使用另一个(非 OpenSSL)客户端来建立连接并查看它是否失败并提供更多信息。例如gnutls-cli ,您可以通过 brew install gnutls 安装它,它提供了相当多的调试信息。

关于macos - macOS 上的 wget 如何处理证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65934480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com