如何让 Gnu/Linux 信任 Windows 开箱即用的证书?

Udo*_*o G 11 ssl openssl curl certificates

如此 SSL 检查报告的那样,存在一个 SSL 链损坏的服务器:

SSL检查报告

我知道这是一个应该在服务器本身上解决的问题,但有时这很难解决(我不是服务器的管理员)。

问题是,Windows 上的 Chrome/Mozilla/Edge无论如何都信任站点证书

在此处输入图片说明

但是,在 Gnu/Linux 部署(Docker 中的 Ubuntu 18.04)中,证书不受信任:

curl: (60) SSL certificate problem: unable to get local issuer certificate
Run Code Online (Sandbox Code Playgroud)

我尝试update-ca-certificates甚至导入了 Globalsign 根证书。update-ca-certificates在这种情况下报告了重复的证书。无论如何,没有任何作用。

如何繁殖

使用 Docker:

docker run -it ubuntu:18.04

# within container:
apt-get update
apt-get -y install curl
curl https://betriebsheft.vog.it  # <---- "unable to get local issuer certificate"
Run Code Online (Sandbox Code Playgroud)

我怎样才能让 Gnu/Linux 信任这个证书?

PS:在另一台服务器上正确部署了相同的证书。

gar*_*Red 11

真正的解决方法是确保您的服务器提供链中的所有证书,而不仅仅是终端实体(服务器)证书。

将您的服务器管理员指向RFC 5246 第 7.4.2 节,其中明确指出此消息将服务器的证书传达给客户端。


如果您的管理员出于某种原因拒绝/无法执行此操作,您的替代选择是尝试curl处理格式错误的握手。

根据 Curl 邮件列表上的消息:

有人可以确认 cURL 是否支持(或不支持)中间证书?

是的,它确实。所有 ca 证书都有一个一直到根的证书链。您与 curl 一起使用的 ca 包需要包含整个链的证书。

/ 丹尼尔.haxx.se

您应该能够将根 CA 和所有中间证书添加到一个包中,并curl使用该--cacert <file>选项指向它。

当您的浏览器工作时,您可以从那里访问正确的 CA 证书。在证书选项卡上(每个浏览器都不同,但我相信你会弄明白),查看证书链。双击根CA第一GlobalSign根CA - G1和对细节选项卡,点击复制到文件...。将其另存为root.cer. 对AlphaSSL CA-SHA256-G2执行相同操作并将其另存为issuing.cer. 将两者合并在一个文件中(例如chain.cer)并将其用作-cacert.

正如@AB 所指出的,丢失的证书也可以在这里找到。


您的浏览器可以工作,因为它们缓存 CA 证书。如果您在过去的某个时间点导航到一个正确配置的网站,该网站的证书由与您的服务器证书相同的 CA 颁发,它将被浏览器缓存。当您随后访问错误配置的站点时,您的浏览器将使用其缓存中的 CA 证书来构建链。对您来说,似乎一切都很好,尽管在幕后,服务器配置错误。

请注意,在 Windows 上,IE/Edge 和 Chrome 共享相同的缓存,而 Firefox 使用自己的缓存。

除了上述内容之外,IE/Edge 和 Chrome(因为它们共享相同的加密堆栈)将在名为AuthorityInformationAccess 的证书中使用扩展。这有一个caIssuer选项,它提供一个 URL,可以从中下载最终实体证书的 CA 证书。因此,即使这些浏览器中的一个没有缓存先前浏览中丢失的证书,它也可以在需要时获取它。请注意,Firefox 不会这样做,这就是为什么当 IE/Edge 和 Chrome 似乎可以工作时,有时 Firefox 会显示证书错误的原因。

  • @garethTheRed :我知道服务器没有提供所有证书,但**服务器不在我的控制之下**(这就是我所说的“不是我的服务器”)。我只是想访问外国服务器上的 API。在 Windows 下,我的浏览器都没有抱怨证书,只有 Linux/Debian/Ubuntu 有。 (2认同)
  • 缺少的 **intermediate** 证书(如@garethTheRed 所述)可以在此处找到:https://support.globalsign.com/customer/portal/articles/1223298-alphassl-intermediate-certificates。OP 最初只是尝试添加可能已经到位的 *root* 证书,因此一无所获。 (2认同)