停用 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。
时间线 #
为了方便用户过渡,此更改将分几个阶段进行。
时间 | 正在更改什么? |
---|---|
Gradle 将开始从 HTTP 重定向到 HTTPS。 | |
禁用 HTTP 24 小时并永久放弃对 TLSv1 的支持。 事后分析。 | |
对 Gradle 资源的 HTTP 请求将被拒绝。 仅支持 HTTPS。 | |
为 gradle.com 和 gradle.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 的用户最有可能受到此更改的影响。
类似地,我们可以看到,虽然我们最大的 services.gradle.org
用户是 Java 用户代理,但 Artifactory 是我们的第二大用户,并且比任何其他用户代理更有可能使用 HTTP
。
使用这些数据,我们确定所有 Nexus 请求中有 16% 和所有 Artifactory 请求中有 11% 正在使用 HTTP 而不是 HTTPS。
我们建议您审核您的企业工件镜像,以确保它们正在使用 HTTPS 而不是 HTTP。
我们为什么要这样做? #
在 2019 年 6 月初,在加入 Gradle 团队之前,我公开披露了我的研究,研究了 JVM 生态系统中许多最受欢迎的项目是如何通过 HTTP 而不是 HTTPS 解析其依赖项的。
当 Sonatype(Maven Central 的维护者)分析他们一个月的流量时,他们确定 Maven Central 下载的 25% 仍然在使用 HTTP。
由于这些发现,Gradle 正在参与一项行业范围的倡议,以在 2020 年 1 月 15 日或前后停用所有主要工件服务器对 HTTP 的支持。
截至本博客文章发布时,以下组织也参与其中并已发布公告