SSL/TLS协议简介,各个版本区别
一、SSL/TLS协议是什么
SSL协议(Secure Sockets Layer,安全套接字层),是由网景(Netscape)公司在1990年推出的一种标准安全协议,用于在网络通信中建立Web浏览器和Web服务器之间的加密链接。
TLS(Transport Layer Security,传输层安全)是 IETF组织 (工程任务组)在1999年将SSL3.0协议规范进行了标准化。
SSL(Secure Sockets Layer)和TLS(Transport Layer Security)的关系就像windows XP和windows 7的关系,升级后改了个名字而已。
HTTPS=HTTP+TLS
二、SSL/TLS发展史
- SSL 1.0仅是网景内部版本,由于严重Bug,从未公开发布
- SSL 2.0 发布于1995年2月,同样存在一些安全漏洞,已于2011年废弃
- SSL 3.0 发布于1996年,经过完全重新设计,也是一度广泛使用的版本,但由于易遭臭名昭著的POODLE攻击,同样在2015年已被废弃
- TLS 1.0,发布于1999年1月,为协议从网景移交到IETF后的第一个版本,该版本变化并不大,已于2020年被废弃
- TLS 1.1,发布于2006年4月,修复了安全漏洞,增强加密强度,同样于2020年被废弃
- TLS 1.2,发布于2008年8月,强化了支持的算法包,增加了扩展定义,也是目前的使用的主流版本
- TLS 1.3,发布于2018年8月,在强化安全性的同时,引入了0-RTT模式,降低了传输延迟,增强了传输性能
三、TLS1.2 和TLS1.3主要区别
1、更快的访问速度
使用 TLS 1.2 需要两次往返( 2-RTT )才能完成握手,然后才能发送请求

TLS 1.3 的握手不再支持静态的 RSA 密钥交换,这意味着必须使用带有前向安全的 Diffie-Hellman 进行全面握手。使用 TLS 1.3 协议只需要一次往返( 1-RTT )就可以完成握手

2、更强的安全性
TLS 1.3 在之前版本的基础上删除了那些不安全的加密算法,这些加密算法包括:
- RSA 密钥传输 —— 不支持前向安全性
- CBC 模式密码 —— 易受 BEAST 和 Lucky 13 攻击
- RC4 流密码 —— 在 HTTPS 中使用并不安全
- SHA-1 哈希函数 —— 建议以 SHA-2 取而代之
- 任意 Diffie-Hellman 组—— CVE-2016-0701 漏洞
- 输出密码 —— 易受 FREAK 和 LogJam 攻击
四、查询JDK支持协议版本
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, null, null);
SSLSocketFactory factory = context.getSocketFactory();
SSLSocket socket = (SSLSocket) factory.createSocket();
String[] supportedProtocols = socket.getSupportedProtocols();
System.out.println("supported protocols: " + Arrays.asList(supportedProtocols));
String[] enabledProtocols = socket.getEnabledProtocols();
System.out.println("enabled protocols: " + Arrays.asList(enabledProtocols));
各版本JDK支持协议
| Java版本 | HTTPS请求默认使用的TLS版本 | 支持的协议 |
|---|---|---|
| JDK7 | TLSv1 | TLSv1、TLSv1.1、TLSv1.2、SSLv3 |
| JDK8 | TLSv1.2 | TLSv1、TLSv1.1、TLSv1.2、SSLv3 |
| JDK11 | TLSv1.3 | TLSv1、TLSv1.1、TLSv1.2、TLSv1.3、SSLv3 |
五、参考
https://www.jiamisoft.com/blog/28126-tls.html
https://zhuanlan.zhihu.com/p/558594332?utm_id=0
https://zhuanlan.zhihu.com/p/44980381