SSL/TLS协议简介,各个版本区别

wusanga / 2023-05-09 / 原文

一、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发展史

  1. SSL 1.0仅是网景内部版本,由于严重Bug,从未公开发布
  2. SSL 2.0 发布于1995年2月,同样存在一些安全漏洞,已于2011年废弃
  3. SSL 3.0 发布于1996年,经过完全重新设计,也是一度广泛使用的版本,但由于易遭臭名昭著的POODLE攻击,同样在2015年已被废弃
  4. TLS 1.0,发布于1999年1月,为协议从网景移交到IETF后的第一个版本,该版本变化并不大,已于2020年被废弃
  5. TLS 1.1,发布于2006年4月,修复了安全漏洞,增强加密强度,同样于2020年被废弃
  6. TLS 1.2,发布于2008年8月,强化了支持的算法包,增加了扩展定义,也是目前的使用的主流版本
  7. TLS 1.3,发布于2018年8月,在强化安全性的同时,引入了0-RTT模式,降低了传输延迟,增强了传输性能

三、TLS1.2 和TLS1.3主要区别

1、更快的访问速度

使用 TLS 1.2 需要两次往返( 2-RTT )才能完成握手,然后才能发送请求
TLS1.2握手

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

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