开篇感谢大神们指引方向,参考资料:
- https://www.paolotagliaferri.com/an-overview-of-ssl-tls-secure-sockets-layer-transport-layer-security-tls-1-2/
- https://www.paolotagliaferri.com/overview-of-transport-layer-security-protocol-tls-1-3/
- https://tls13.ulfheim.net/
- 《图解密码技术》
- https://tools.ietf.org/html/rfc8446#section-4.6.1
Web应用通常使用HTTP协议在用户和Web服务器间传输信息。HTTP协议不对传输的数据加密,因此当我们通过HTTP协议访问网页和发送内容时,网络中任何可获取到(通过转发、嗅探等方式)HTTP流量的中间者都可以知晓传输内容。早期,Web应用的主要形式还是用户通过浏览器浏览网站发布的公开信息,这看起没有问题,但随着网站服务越来越多样化,用户需要和网站交互私密信息,如网购时传输的银行卡信息。为了防止其他人获取HTTP流量的内容,产生了SSL/TLS协议,SSL/TLS协议加密HTTP协议的内容,让中间者获取到的是加密后内容。SSL/TLS位于TCP/IP模型TCP的上一层,也可以用来加密传输其他上层协议的数据内容,如SMTP、POP3和FTP,SSL/TLS加上HTTP就是HTTPS。
本文内容冗长,大家可以选择自己感兴趣的部分阅读,导航如下:
- SSL/TLS简介
- TLSv1.3协议的规范
- 基于Java的协议实现
一、SSL和TLS
SSL全称安全套接层(Secure Socket Layer),TLS全称传输层安全(Transport Layer Security)。最早网景公司设计了SSL,当SSL发展到3.0时,IETF(Internet Engineering Task Force)修复了SSL 3.0的漏洞,并在其基础上设计发布了TLS 1.0,也可将其看作SSL 3.1。至今,TLS已经发展到了版本1.3(RFC 8446 -> https://tools.ietf.org/html/rfc8446)。各个版本的SSL和TLS的发布时间如下:
SSL 1.0 – 由于安全问题未公开发布。
SSL 2.0 – 1995年发布,2011年弃用。存在公开的安全漏洞。
SSL 3.0 – 1996年发布,2015年弃用。存在公开的安全漏洞。
TLS 1.0 – 1999年发布,计划2020年弃用。
TLS 1.1 – 2006年发布,计划2020年弃用。
TLS 1.2 – 2008年发布。
TLS 1.3 – 2018年发布。
因存在安全问题,SSL基本上已被弃用。很多应用场景中提及SSL实际上就是指TLS,SSL证书(SSL Certificate)实际上是SSL/TLS证书,同时支持SSL协议和TLS协议。本文如未指明协议版本,则为TLS 1.3。
二、协议的规范
1、TLS 1.3
TLS协议位于HTTP(或其他应用层协议,如SMTP)协议与TCP协议之间,TCP协议及其下层协议都不对传输的数据进行加密,也不对通信双方进行认证。TLS的作用是:1)保护传输数据的机密性(Confidentiality),即使第三方截获了通信数据也无法获知真实内容;2