AddTrust 根证书弃用会导致 OpenSSL 和 GnuTLS 系统崩溃

30月20日,根证书XNUMX年有效期到期 添加信任应用 生成最大的认证机构 Sectigo (Comodo) 之一的交叉签名证书。 交叉签名允许与未将新 USERTRust 根证书添加到其根证书存储中的旧设备兼容。

AddTrust 根证书弃用会导致 OpenSSL 和 GnuTLS 系统崩溃

从理论上讲,终止 AddTrust 根证书只会导致违反与旧系统(Android 2.3、W​​indows XP、Mac OS X 10.11、iOS 9 等)的兼容性,因为交叉签名中使用的第二个根证书仍然存在有效且现代的浏览器在检查信任链时会考虑这一点。 练习中 出现了 非浏览器 TLS 客户端(包括基于 OpenSSL 1.0.x 和 GnuTLS 的客户端)中的交叉签名验证问题。 如果服务器使用通过信任链链接到 AddTrust 根证书的 Sectigo 证书,则不再建立安全连接,并出现错误,指示证书已过期。

如果现代浏览器的用户在处理交叉签名的 Sectigo 证书时没有注意到 AddTrust 根证书已过时,那么各种第三方应用程序和服务器端处理程序就会开始出现问题,从而导致 违反 工作 许多基础设施使用加密通信通道进行组件之间的交互。

例如,有 问题 访问 Debian 和 Ubuntu 中的某些软件包存储库(apt 开始生成证书验证错误),使用“curl”和“wget”实用程序的脚本请求开始失败,使用 Git 时观察到错误, 侵犯了 Roku 流媒体平台正在运行,不再调用处理程序 条纹 и DataDog, 开始 发生崩溃 在 Heroku 应用程序中, 停了 OpenLDAP 客户端连接,检测到使用 STARTTLS 将邮件发送到 SMTPS 和 SMTP 服务器时出现问题。 此外,在使用带有 http 客户端的模块的各种 Ruby、PHP 和 Python 脚本中也发现了问题。 浏览器问题 影响 Epiphany,停止加载广告屏蔽列表。

Go 程序不受此问题的影响,因为 Go 提供 自己的实现 TLS。

应该该问题影响较旧的发行版(包括 Debian 9、Ubuntu 16.04、 瑞尔 6/7)使用有问题的 OpenSSL 分支,但是问题 表现出来 当 APT 包管理器在当前版本的 Debian 10 和 Ubuntu 18.04/20.04 中运行时也是如此,因为 APT 使用 GnuTLS 库。 问题的关键在于,许多 TLS/SSL 库将证书解析为线性链,而根据 RFC 4158,证书可以表示有向分布式循环图,其中需要考虑多个信任锚。 关于 OpenSSL 和 GnuTLS 中的此缺陷 已知 很多年了。 在 OpenSSL 中,该问题在分支 1.1.1 中得到修复,并在 的GnuTLS 遗体 未修正的.

作为解决方法,建议从系统存储中删除“AddTrust 外部 CA 根”证书(例如,从 /etc/ca-certificates.conf 和 /etc/ssl/certs 中删除,然后运行“update-ca” -certificates -f -v"),之后 OpenSSL 开始在其参与下正常处理交叉签名证书。 使用 APT 包管理器时,您可以自行承担风险地禁用单个请求的证书验证(例如,“apt-get update -o Acquire::https::download.jitsi.org::Verify-Peer=false”) 。

为了阻止这个问题 Fedora и RHEL 建议将AddTrust证书添加到黑名单:

trust dump —filter «pkcs11:id=%AD%BD%98%7A%34%B4%26%F7%FA%C4%26%54%EF%03%BD%E0%24%CB%54%1A;type=cert» \
> /etc/pki/ca-trust/source/blacklist/addtrust-external-root.p11-kit
更新 ca-trust 摘录

但这个方法 不工作 对于 GnuTLS(例如,运行 wget 实用程序时继续出现证书验证错误)。

在服务器端你可以 修改 秩序 列出服务器发送给客户端的信任链中的证书(如果与“AddTrust external CA Root”关联的证书从列表中删除,则客户端验证将成功)。 要检查并生成新的信任链,您可以使用该服务 Whatsmychaincert.com。 门扇也 提供 替代交叉签名中间证书“AAA证书服务“,有效期至 2028 年,并将保持与旧版本操作系统的兼容性。

补充:问题也 表现出来 在 LibreSSL 中。

来源: opennet.ru

添加评论