为什么我得到javax.net.ssl.SSLException:收到致命警报:ant的protocol_version?

时间:2018-07-09 11:08:22

标签: java maven ssl ant ivy

我在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)

2 个答案:

答案 0 :(得分:1)

原因是ant使用ivy插件从Maven Central下载了一些工件。 Java 7默认使用旧的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?

至少可以通过将TLS版本指定为 java系统属性来解决Java 7。

所有示例都运行默认的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

更新Java 7版本

也可以通过更新Java 7版本来解决问题。但是最后一个可用的版本(7u80)不能解决问题。需要使用Oracle Advanced Support(以前称为Java for Business)提供的更新。

答案 1 :(得分:0)

如果您使用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/

中找到了此信息