【发布时间】:2019-02-08 15:45:55
【问题描述】:
我正在尝试使用 curl 访问我们在内部开发的应用程序的 URL,并且在我看到的服务器上
http: TLS handshake error from 1.2.3.4 remote error: tls: unknown certificate authority.
这仅在我们使用 curl(在 git bash 内部)或 wget 到达端点时发生。当我们在 Windows 上使用 IE 时,它工作得很好。我什至尝试使用本机 SSL 库(应该与 IE 相同)重新安装 git bash,但仍然收到相同的错误消息。
甚至尝试下载 curl-ca-bundle.crt 文件并保存到与 curl 二进制文件相同的位置,甚至直接告诉它使用 curl --cacert 选项使用此文件,但仍然没有乐趣。
我比较了 IE 报告的根证书和 curl-ca-bundle.crt 中的根证书,它们看起来相同(它们的排列并不完全相同,但它们在它们在 BEGIN 和 END 标记之间,一个在屏幕上更宽,因此在有意义的情况下使用更少的行)。
希望有人知道接下来要尝试什么,因为我们两个人整个下午都在为此烦恼。
wget 也会给出错误信息:-
$ wget https://bler.com/admin/user
--2018-09-03 15:53:43-- https://bler.com/admin/user
Connecting to 132.146.1.142:8090... connected.
ERROR: cannot verify oss.dns.networks.bt.com's certificate, issued by 'CN=DigiCert SHA2 Secure Server CA,O=DigiCert Inc,C=US':
Unable to locally verify the issuer's authority.
To connect to oss.dns.networks.bt.com insecurely, use '--no-check-certificate'.
我们正在使用本地代理服务器,并且设置了 HTTP_PROXY。它必须使用代理,因为我们可以看到我们正在到达终点。
【问题讨论】:
-
您的服务器是否返回了完整的证书链? whatsmychaincert.com
-
我认为您正在阅读服务器上的错误消息,说服务器正在检测证书错误 - 但是我怀疑“远程错误”是指“远程客户端的错误消息” - 所以问题是 curl 和 wget 不认为您的代理/服务器证书来自有效的 CA。您是否使用 --proxy/----proxytunnel 选项来卷曲?你在 curl 中使用什么命令行?我认为与 wget 类似,您将不得不使用一些选项来指定代理并确保它将隧道传输 ssl 内容。
-
很遗憾,我无法使用 whatsmychaincert.com,因为该网站仅限于我们的内部 IP 和少数合作伙伴。
-
不,我没有使用 curl 的 --proxy 选项,但我使用的是 https_proxy 环境变量,它具有相同的效果。如果我取消设置这个变量,我只会得到一个超时。
-
这是完整的命令行
curl -i -w "\n" -H "Accept: application/json; version=1.0" -u "admin:password" --digest -X GET https://oss.dns.networks.bt.com/admin/user