为什么我收到来自 MavenCentral 的“接收到致命警报: protocol_version”或“ peernot 身份验证”?

在2018年6月18日之后连接到 Maven Central/https://repo1.maven.org时,我得到了以下错误。

Received fatal alert: protocol_version

或者

Received fatal alert: peer not authenticated
144933 次浏览

2018年6月,为了提高安全性和遵守现代标准,不安全的 TLS 1.0和1.1协议将不再支持 SSL 连接到 Central。这应该只会影响 Java6(和 Java7)的用户,这些用户也使用 https 访问中央服务器,根据我们的指标,中央服务器的用户比例不到0.2% 。

有关更多细节和解决办法,请参见这里的博客和常见问题: https://blog.sonatype.com/enhancing-ssl-security-and-http/2-support-for-central

解决方案1: 配置 Java7

需要在命令行中使用 Java 属性启用 TLS 1.2协议

mvn -Dhttps.protocols=TLSv1.2 install

install只是目标的一个例子

用这种方法可以解决 ant的相同误差

java -Dhttps.protocols=TLSv1.2 -cp %ANT_HOME%/lib/ant-launcher.jar org.apache.tools.ant.launch.Launcher

解决方案2: 使用 Java7和 Oracle 高级支持

同样的问题也可以通过更新 Java7版本来解决。但是最后一个可用的版本(7u80)并没有解决这个问题。需要使用 Oracle 高级支持(以前称为 JavaforBusiness)提供的更新。

解决方案3: 改用 Java8或更高版本

$JAVA_HOME配置为指向 Java8。

Sonatype 常见问题解答

停止对 TLSv1.1及以下版本的支持

下面的命令帮助我(在运行 mvn 之前在 bash 上执行)

export MAVEN_OPTS=-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2

对不起,我不知道你为什么会收到错误消息。然而,我使用的是 Java7和 Windows 10,我的解决方案是通过改变 JAVA_HOME的环境变量来暂时使用 Java8。然后我可以运行 mvn install并从 Maven 中央存储库获取。

正如@v. ladynev 所说,它可以用于 JDK 1.7

对于 Eclipse,要使用 TLS 命令行参数执行“ Run As”maven install,只需配置您正在使用的 JDK。

通过 窗口 > < em > 首选项 > < em > Java > 已安装的 JRE打开对话框。

然后突出显示您正在使用的(应该是 JDK,而不是 JRE) ,单击 编辑。在字段“ DefaultVM 参数”中,填充值 -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2。如下所示:

enter image description here

清理项目(可能是可选的) ,然后重新运行 maven install

使用 jdk7-u221,我需要安装 JavaCryptography 扩展(JCE)

Java 加密扩展

在 Windows 应用服务器上设置 java 属性:

  • 配置 tomcat > 作为管理员运行
  • 然后添加 Javaopts:

  • 重新启动服务。

将 maven 版本更新为3.6.3并运行

mvn -Dhttps.protocols=TLSv1.2 install

它可以用在 Centos 6.9上

添加“-Dhttps.protocol = TLSv1,TLSv1.1,TLSv1.2”到 Window-> Preferences-> Java-> Installated JRE in Eclipse 下的“ Default VM reference”,验证并运行您的项目,它应该并且将会工作。