【问题标题】:New SSL certificate verification errors - what's the root cause?新的 SSL 证书验证错误 - 根本原因是什么?
【发布时间】:2021-11-16 16:51:46
【问题描述】:

我的应用程序使用关闭 API (https://developer.close.com/) 来存储用户数据。我们的测试环境现在在尝试写入时出现 SSL 错误:

Faraday::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (certificate has expired))

原因可能是什么?我阅读错误消息的第一个假设是关闭证书可能已过期。但这似乎不太可能 - 服务通常维护良好,我们在生产中没有任何问题。

我考虑的下一件事是我们服务器上的证书存储可能已过时。这不会让我感到惊讶,因为服务器运行的是 Ubuntu 14 和 other people are experiencing problems there。但是我们有多台配置相同的机器,只有一台给我们带来了麻烦。这可能是根本原因吗?

【问题讨论】:

  • LetsEncrypt 兼容性链(该服务器使用的,和许多其他的一样)会导致“过期”,具体取决于所使用的 OpenSSL 版本(Trusty 提供 1.0.1f,但 API 可能不同)和证书存储,if 默认取决于 部分 ca-certificates 包(标准 repo 中的最后一个版本似乎是 20170717~14.04.2),但也取决于是否运行 @987654324 @ 删除了 expired DST 根目录(我已经看到了它的报告)。这两个不同的因素中的一个或两个都可以称为“过时”;哪个适合你的?
  • @dave_thompson_085 在损坏的机器上,我们有 openssl 1.0.1f 并且 DST 根目录没有被删除。运行 update-ca-certificates 也没有删除它。手动删除它解决了我的问题。

标签: ssl openssl


【解决方案1】:

复制:

$ openssl s_client -CApath /dev/null -showcerts -connect api.close.com:443 -servername api.close.com
CONNECTED(00000003)
depth=3 O = Digital Signature Trust Co., CN = DST Root CA X3
verify error:num=10:certificate has expired
notAfter=Sep 30 14:01:15 2021 GMT
verify return:0

问题原来是the recent deprecation of the DST root certificate。旧的根证书 (DST) 已于 9 月 30 日弃用,现在需要使用现代版本 (ISRG)。

测试服务器仍然安装了 DST 和 ISRG 证书,而所有其他机器只安装了 ISRG。我假设这个特定 API 的某些东西优先寻找 DST 证书并忽略 ISRG,除非它是唯一的。

解决方法:从/usr/share/ca-certificates/mozilla 中删除 DST 证书并将 ISRG 留在那里 - 尝试上面的 openssl 命令,现在它可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 2022-01-03
    • 2019-09-08
    • 2015-06-05
    相关资源
    最近更新 更多