虚拟主机

当前位置:  首页 >  常见问题 >  https如何设置TLS协议版本 javax.net.ssl.SSLException: Received fatal

https如何设置TLS协议版本 javax.net.ssl.SSLException: Received fatal

来源:未知

作者:admin

更新时间:2019-08-09 18:02

景安网络—专业的多线服务器托管商!提供快云服务器,快云VPS,虚拟主机,域名注册,网站空间,服务器托管,服务器租用,SSL证书。快云vps 1核1G1M,199元/首年,活动进行中!查看详情

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.TLS有哪些版本、JDK默认支持哪些版本

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

3.java程序中如何指定TLS版本?

目前从JDK1.8开始都默认TLSv1.2协议了,但对于还在用版本低的JDK时,如果服务端禁用了TLSv.1 ,而代码中没有指定具体协议版本,那么JDK都是采用默认版本建立连接。这样会出现以下错误:
javax.net.ssl.SSLException: Received fatal alert: protocol_version)
出现此类错误,有可能就是服务端和客户端协议版本不一致导致的。
程序中可以这样解决:
 
第一种方式:
采用httpClient发送请求也和这个代码类似,就不放示例了
 
第二种方式:
第二种方式setDefault是全局性的,相当于整个程序如果没有指定TLS版本,那么默认都采用1.2,会影响程序中其它使用默认TLS版本的地方,比如:之前使用默认TLSv1.0版本的,如果你设置了setDefault()变成1.2了,如果服务端不支持1.2协议会发生异常,不过现在应该没有不支持1.2协议的,所以大家自己考虑采用哪种方式。
还有人说用了第二种方式不起作用,那么我解释一下:
比如使用JDK自带的HttpsURLConnection发送https请求,代码如下:
 

本文链接:https://ssl.zzidc.com/changjianwenti/2019/0809/675.html

关键字:https,TLS协议,

若无特别注明,文章皆为景安网络原创,转载请注明出处。

上云HI购
 
返回顶部

联系我们

SSL产品
24小时客服热线:

4006-598-598

0371-9618961