Gradle 服务停用 HTTP

从 2020 年 1 月开始,**Gradle 服务将只服务使用 HTTPS 的请求**。从那时起,所有使用 HTTP 的请求都将被拒绝,任何使用非安全 HTTP 协议的 Gradle URL 的构建和工件镜像都将失败。

如果您通过自己的工件服务器(如 Artifactory 或 Nexus)代理我们的服务,则需要确保更新镜像配置以使用 HTTPS 而不是 HTTP。

Gradle 服务

此更改将影响以下服务。

插件门户

默认情况下,Gradle 构建工具在从插件门户解析插件时使用 HTTPS。如果您没有 声明自定义插件存储库,则您应该不受影响。

如果您的组织从 URL plugins.gradle.org/m2/* 镜像插件门户,您应该检查您的镜像是否使用 HTTPS。

Gradle 分发版

从 Gradle 1.2 开始,Gradle 包装器使用 HTTPS 下载 Gradle 分发版。如果您使用的是 HTTPS URL,则您的 gradle-wrapper.properties 应该不受影响。

Gradle 分发版从以下 URL 提供

  • services.gradle.org
  • downloads.gradle.org
  • downloads.gradle-dn.com

如果您的组织从这些 URL 中的任何一个镜像 Gradle 分发版,您应该检查您的镜像是否使用 HTTPS。

其他 Gradle 软件

其他 Gradle, Inc. 生成的软件发布到 Artifactory 存储库,例如 Gradle 工具 API。大多数构建不会使用此存储库,除非它们正在构建与 Gradle 集成的工具(如 IntelliJ IDEA)。

Gradle Artifactory 存储库位于 repo.gradle.org

Gradle 构建工具

Gradle 6.0 不推荐在构建脚本中使用 HTTP 下载资源和工件,除非明确选择。

对于需要使用 HTTP 的用户,Gradle 提供了几个新的 API,以允许在个别情况下继续使用 HTTP。

时间线

为了方便用户过渡,此更改将分几个阶段进行。

何时 发生了什么变化?
2019 年 10 月 29 日 Gradle 将开始从 HTTP 重定向到 HTTPS。
2019 年 11 月 14 日 禁用 HTTP 24 小时,并永久放弃对 TLSv1 的支持。 事后分析.
2020 年 1 月 15 日 对 Gradle 资源的 HTTP 请求将被拒绝。仅支持 HTTPS。
2020 年 2 月 15 日 gradle.comgradle.org 启用 HSTS。此更改只会影响浏览器。

最有可能受到影响的用户

作为这项工作的一部分,我们花了一些时间分析了 CDN 日志中的数据,以确定此更改对用户的影响程度。

这些百分比代表了我们 72 小时内流量的样本。

服务 HTTP %
plugins.gradle.org/m2/* 0.72%
services.gradle.org 5.77%
downloads.gradle.org 23.87%
downloads.gradle-dn.com 9.76%
repo.gradle.org 9.53%

通过用户代理细分 services.gradle.org 的流量,我们可以清楚地看到,JFrog 的 Artifactory 用户最有可能受到此更改的影响。

HTTP by Agent for services.gradle.org

同样,我们可以看到,虽然我们 services.gradle.org 的最大用户是 Java 用户代理,但 Artifactory 是我们的第二大用户,并且比任何其他用户代理更有可能使用 HTTP

HTTP vs HTTPS for services.gradle.org by Agent

使用这些数据,我们确定了 16% 的 Nexus 请求和 11% 的 Artifactory 请求使用的是 HTTP 而不是 HTTPS。

我们建议您审核您的公司工件镜像,以确保它们使用 HTTPS 而不是 HTTP。

我们为什么要这样做?

mitm_build

在 2019 年 6 月初,加入 Gradle 团队之前,我在 公开披露了我的研究,研究了 JVM 生态系统中多少最受欢迎的项目正在通过 HTTP 而不是 HTTPS 解析其依赖项。

SonatypeMaven Central 的维护者)分析了他们一个月的流量时,他们发现 25% 的 Maven Central 下载仍然使用 HTTP。

基于这些发现,Gradle 正在参与一项行业范围内的倡议,从 2020 年 1 月 15 日或前后开始,从所有主要的工件服务器中取消对 HTTP 的支持。

截至发布本文时,以下组织也参与其中并发布了公告:

讨论