当TLS v1.1和v1.0支持停止时,修复Gradle依赖关系的解析

327 阅读2分钟

Maven Central和Bintray已经宣布,他们将停止对TLS v1.1及以下版本的支持。下面是你需要知道的,如果你受到影响,可以纠正你的Gradle构建。

如果你使用Java 6或7并使用Gradle 2.1到4.8版本,你需要采取行动。

如何检查你是否受到影响

你可能已经从你的构建中得到以下错误之一,在错误信息中说。"无法解决[坐标]"。

收到了致命的警报:protocol_version

对等体未被验证

如果没有,你可以通过运行以下程序来检查你是否会受到影响:

gradle --version       # Without Gradle Wrapper

./gradlew --version    # Using Gradle Wrapper on *nix

gradlew.bat --version  # Using Gradle Wrapper on Windows

它将打印类似这样的东西:

------------------------------------------------------------
Gradle 3.5
------------------------------------------------------------

Build time:   2017-04-10 13:37:25 UTC
Revision:     b762622a185d59ce0cfc9cbc6ab5dd22469e18a6

Groovy:       2.4.10
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.7.0_80 (Oracle Corporation 24.80-b11)
OS:           Mac OS X 10.13.5 x86_64

如果这些都是真的,你必须采取行动:

  • JVM版本为Java 7u130或更低
  • Gradle版本在2.1和4.8之间,包括在内
  • 并且 repository {} 你已经声明了一个mavenCentral() ,或jcenter()

如何使用TLS 1.2进行依赖性解析

你可以采取以下任何一项行动来使用TLS v1.2+:

  • 使用Java 1.7.0_131-b31或以上版本运行Gradle
  • 升级到Gradle 4.8.1或以上版本
  • 或用 maven { url = "http://repo.maven.apache.org/maven2" } 替换mavenCentral() ,用jcenter() 替换 。maven { url = "http://jcenter.bintray.com" }

建议采用前两种解决方案,因为第三种解决方案打开了一个可能的攻击媒介。

其他资源

Maven CentralBintray知识库中关于停止支持旧版本TLS的帖子解释了这些变化的必要性背景。

你也可以从GitHub上的gradle/gradle#5740找到Gradle的具体细节。