为什么我得到 javax.net.ssl.SSLException: Received fatal alert: protocol_version for ant?
Why am I getting javax.net.ssl.SSLException: Received fatal alert: protocol_version for ant?
我在 2018 年 6 月之后收到此错误:
javax.net.ssl.SSLException: Received fatal alert: protocol_version
at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1979)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1086)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
at org.apache.tools.ant.taskdefs.Get$GetThread.openConnection(Get.java:731)
at org.apache.tools.ant.taskdefs.Get$GetThread.get(Get.java:652)
at org.apache.tools.ant.taskdefs.Get$GetThread.run(Get.java:642)
原因是 ant
从 Maven Central 下载了一些工件,例如使用 ivy
插件。
Java7默认使用旧的TLS协议版本。
2018 年 6 月,与 Maven Central 的 SSL 连接将不再支持 TLS 1.0 和 1.1 协议。
Why am I getting "Received fatal alert: protocol_version" or "peer not authenticated" from Maven Central?
至少 Java 7 可以通过将 TLS 版本指定为 java 系统 属性 来解决。
所有示例运行 默认的 ant 任务。
对于Windows
java -Dhttps.protocols=TLSv1.2 -cp %ANT_HOME%/lib/ant-launcher.jar org.apache.tools.ant.launch.Launcher
对于Linux
java -Dhttps.protocols=TLSv1.2 -cp ${ANT_HOME}/lib/ant-launcher.jar org.apache.tools.ant.launch.Launcher
需要将 ANT_HOME
作为系统变量或指定 ant 库的完整路径(c:/ant/
— 是 ant
安装的路径)。
java -Dhttps.protocols=TLSv1.2 -cp c:/ant/lib/ant-launcher.jar org.apache.tools.ant.launch.Launcher
更新Java7版本
也可以通过更新Java 7 版本来解决问题。但是最后一个可用版本 (7u80
) 并没有解决这个问题。需要使用 Oracle 高级支持(以前称为 Java for Business)提供的更新。
如果您使用 Maven 项目,请尝试将其添加到您的 pom.xml 中。原因可能是您使用了旧版本的 javax.mail。这对我有用。
<dependencies>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
在官方文档中找到此信息:https://javaee.github.io/javamail/
我在 2018 年 6 月之后收到此错误:
javax.net.ssl.SSLException: Received fatal alert: protocol_version
at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1979)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1086)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
at org.apache.tools.ant.taskdefs.Get$GetThread.openConnection(Get.java:731)
at org.apache.tools.ant.taskdefs.Get$GetThread.get(Get.java:652)
at org.apache.tools.ant.taskdefs.Get$GetThread.run(Get.java:642)
原因是 ant
从 Maven Central 下载了一些工件,例如使用 ivy
插件。
Java7默认使用旧的TLS协议版本。
2018 年 6 月,与 Maven Central 的 SSL 连接将不再支持 TLS 1.0 和 1.1 协议。
Why am I getting "Received fatal alert: protocol_version" or "peer not authenticated" from Maven Central?
至少 Java 7 可以通过将 TLS 版本指定为 java 系统 属性 来解决。
所有示例运行 默认的 ant 任务。
对于Windows
java -Dhttps.protocols=TLSv1.2 -cp %ANT_HOME%/lib/ant-launcher.jar org.apache.tools.ant.launch.Launcher
对于Linux
java -Dhttps.protocols=TLSv1.2 -cp ${ANT_HOME}/lib/ant-launcher.jar org.apache.tools.ant.launch.Launcher
需要将 ANT_HOME
作为系统变量或指定 ant 库的完整路径(c:/ant/
— 是 ant
安装的路径)。
java -Dhttps.protocols=TLSv1.2 -cp c:/ant/lib/ant-launcher.jar org.apache.tools.ant.launch.Launcher
更新Java7版本
也可以通过更新Java 7 版本来解决问题。但是最后一个可用版本 (7u80
) 并没有解决这个问题。需要使用 Oracle 高级支持(以前称为 Java for Business)提供的更新。
如果您使用 Maven 项目,请尝试将其添加到您的 pom.xml 中。原因可能是您使用了旧版本的 javax.mail。这对我有用。
<dependencies>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
在官方文档中找到此信息:https://javaee.github.io/javamail/