停用 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 Wrapper 一直使用 HTTPS 下载 Gradle 发行版。 如果您的 gradle-wrapper.properties 使用 HTTPS URL,您应该不会受到影响。

Gradle 发行版从以下 URL 提供

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

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

其他 Gradle 软件 #

其他 Gradle 公司生产的软件发布到 Artifactory 仓库,例如 Gradle Tooling 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

使用这些数据,我们确定所有 Nexus 请求中有 16% 和所有 Artifactory 请求中有 11% 正在使用 HTTP 而不是 HTTPS。

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

我们为什么要这样做? #

mitm_build

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

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

由于这些发现,Gradle 正在参与一项行业范围的倡议,以在 2020 年 1 月 15 日或前后停用所有主要工件服务器对 HTTP 的支持。

截至本博客文章发布时,以下组织也参与其中并已发布公告

讨论