博客
2018 年 2 月 24 日
TLS 1.0 和 1.1 弃用通知
大卫·拉德克利夫和安德烈·阿尔科
安全性是 RubyGems.org 最关心的问题之一。这是一个常量平衡,既为所有用户提供方便的访问权限,又仅提供最安全的连接方式。在过去的几年里,我们一直允许使用一些过时的、不安全的和较弱的加密标准。
通过这篇文章,我们宣布立即弃用并将来禁用 RubyGems.org 所有 HTTPS 连接的 TLSv1 和 TLSv1.1。TLSv1 和 TLSv1.1 将从2018 年 4 月 30 日起被禁用,并且需要 TLSv1.2。
截至 2018 年 2 月,几乎所有到 RubyGems.org 的 HTTPS 流量都已使用 TLSv1.2。根据当前的使用情况统计,我们预计此中止将影响发往 RubyGems.org 的请求少于 1.5%。
为什么要禁用旧版本的 TLS?
原因有几个,但最终都是为了保持 HTTPS 连接的安全,就像它们声称的那样。使用 TLSv1.0 或 TLSv1.1 的连接不再被行业认为是完全安全的,允许不安全的“安全”连接是误导性的。
由于旧版本 TLS 的各种安全问题,已导致整个行业进行更改以停止对它们的支持。 PCI 安全标准委员会 已强制要求任何处理付款的网站 必须停止使用 TLSv1.0 或 TLSv1.1。由于这些要求,像 GitHub 这样的开发者网站也 停止了对较旧 TLS 版本的支持。此外,我们的上游提供商 Fastly 将 停止对较旧 TLS 版本的支持,最迟在 2018 年 6 月 30 日之前。
尽管我们并没有直接在 RubyGems.org 上处理付款,但我们提供用于处理付款的代码。为了保证我们用户的安全,我们将采用与 PCI SSC 及整个行业相同的安全标准。
兼容性检查和故障排除
我们已经创建了一个 自动 SSL 检查,它会告知你的 Ruby 是否在 4 月 30 日之后能够连接到 RubyGems.org。要立即运行检查脚本,请使用此命令: $ curl -sL https://git.io/vQhWq | ruby
。如果你想要了解有关此情况的更多详情,包括你在遇到问题时采用的故障排除步骤,请查看 Bundler 和 RubyGems TLS/SSL 故障排除指南。
已知的,不兼容的客户端
链接到 OpenSSL 版本 1.0.0t 或更低版本的 Ruby 将无法连接到 RubyGems.org。这是因为在 2012 年 3 月 12 日发布的 OpenSSL 1.0.1 中添加了对 TLSv1.2 的支持。你可以通过运行 ruby -ropenssl -e 'puts OpenSSL::OPENSSL_LIBRARY_VERSION'
来检查 Ruby 链接到的 OpenSSL 版本。
运行在 JVM 6 或更低版本上的 JRuby 将无法连接到 RubyGems.org。这是因为 JVM 在 2011 年 7 月 28 日发布的 Java 7 中添加了对 TLSv1.2 的支持。你可以通过运行 java -version
来检查自己的 Java 版本,并查找类似 java version "1.7.0_71"
的文本。如果你运行的是 Java 7,则版本号将以 1.7 开头。
进一步帮助
如果你在 2018 年 4 月 30 日后无法连接到 RubyGems.org,请参阅 指南的更多帮助部分,了解有关如何对问题进行故障排除以及必要时如何提交工单的说明。