Udo*_*o G 11 ssl openssl curl certificates
正如此 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 会显示证书错误的原因。
归档时间: |
|
查看次数: |
3717 次 |
最近记录: |