Creator打包报 javax.net.ssl.SSLException: Received fatal alert: protocol_version异常

文章目录

    • 1、发现问题
    • 2、知识准备与问题分析
      • 2.1、知识准备
        • 2.1.1、知识准备 什么是TLS
        • 2.1.2、TLS有哪些版本、JDK默认支持哪些版本?
        • 2.1.3、JDK支持的tls版本:
      • 2.2、问题分析:
    • 3、解决问题
    • 4、结束语

1、发现问题

  今天在家里打包apk时,上来就报了异常,仔细一看是如下错误:

Exception in thread “main” java.lang.RuntimeException: javax.net.ssl.SSLException: Received fatal alert: protocol_version
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:78)
at org.gradle.wrapper.Install.createDist(Install.java:47)
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
Caused by: 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:1959)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1077)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1300)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at org.gradle.wrapper.Download.downloadInternal(Download.java:59)
at org.gradle.wrapper.Download.download(Download.java:45)
at org.gradle.wrapper.Install$1.call(Install.java:60)
at org.gradle.wrapper.Install$1.call(Install.java:47)
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
… 3 more
执行命令出错,返回值:1。

2、知识准备与问题分析

就是TLS协议版本的警报,讲到这里不得不提一下,乍一看有点蒙,先了解一下常识:

2.1、知识准备

2.1.1、知识准备 什么是TLS

  SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。它是在上世纪90年代中期,由网景公司设计的。(顺便插一句,网景公司不光发明了 SSL,还发明了很多 Web 的基础设施——比如“CSS 样式表”和“JS 脚本”)。
  为啥要发明 SSL 这个协议捏?因为原先互联网上使用的 HTTP 协议是明文的,存在很多缺点——比如传输内容会被偷窥(嗅探)和篡改。发明 SSL 协议,就是为了解决这些问题。
  到了1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在那年把 SSL 标准化。标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。
  很多相关的文章都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。

2.1.2、TLS有哪些版本、JDK默认支持哪些版本?

  TLS版本有:

  • SSLv2
  • SSLv3
  • TLSv1
  • TLSv1.1
  • TLSv1.2
      其中 SSLv2、SSLv3应该没有在用的,一些公司都已经禁用。TLSv1、TLSv1.1 目前还有公司在用,不过很过公司开始陆续禁用。

2.1.3、JDK支持的tls版本:

Creator打包报 javax.net.ssl.SSLException: Received fatal alert: protocol_version异常_第1张图片

2.2、问题分析:

  观察图表我们发现目前从JDK1.8开始都默认TLSv1.2协议了。但对于还在用版本低的JDK时,如果服务端禁用了TLSv.1 ,而代码中没有指定具体协议版本,那么JDK都是采用默认版本建立连接。这样会出现以下错误:

javax.net.ssl.SSLException: Received fatal alert: protocol_version

  出现此类错误,有可能就是服务端和客户端协议版本不一致导致的。

3、解决问题

  于是检查了我的JDK版本,发现是JDK7,然后卸载了当前的JDK重新下载并安装了JDK8,折腾了半天!重新编译,没有报异常了!这里我使用的Creator版本是2.2.0

4、结束语


The End
  好了,今天的分享就到这里,如有不足之处,还望大家及时指正,随时欢迎探讨交流!!!


喜欢的朋友们,请帮顶、点赞、评论!您的肯定是我写作的不竭动力!

你可能感兴趣的:(安卓打包,CocosCreator,游戏开发)