HTTPS(HyperText Transfer Protocol Secure), 译为: 超文本传输安全协议, 常称为HTTP over TLS、HTTP over SSL、HTTP Secure (HTTPS的默认端口号是443(HTTP是80))
当在浏览器导航栏上输入: http://www.baidu.com, 会被重定向到: https://www.baidu.com上
SSL/TLS
HTTPS是在HTTP的基础上使用SSL/TLS来加密报文, 对窃听和中间人攻击提供合理的防护
SSL/TLS也可以用在其他协议上, 比如: FTP -> FTPS, SMTP -> SMTPS
TLS(Transport Layer Security), 译为: 传输层安全性协议, 前身是SSL(Secure Sockets Layer),译为: 安全套接层
历史版本信息:
SSL 1.0: 因存在严重的安全漏洞,从未公开过
SSL 2.0: 1995年,已于2011年弃用(RFC 6176)
SSL 3.0: 1996年,已于2015年弃用(RFC 7568)
TLS 1.0: 1999年(RFC 2246)
TLS 1.1: 2006年(RFC 4346)
TLS 1.2: 2008年(RFC 5246)
TLS 1.3: 2018年(RFC 8446)
SSL/TLS - 工作层次
界于应用层和运输层之间
使用HTTPS的成本
- 证书的费用
- 加解密计算
- 降低了访问速度
有些企业的做法是: 包含敏感数据的请求才使用HTTPS, 其他保持使用HTTP
HTTPS的通信过程:
① TCP的3次握手
② TLS的连接
③ HTTP请求和响应
TLS 1.2的连接
TLS连接的主要步骤如下:
wireshark抓包:
① - Client Hello
重要参数:
- TLS的版本号
- 一个随机数 (Client Random)
- 支持的加密组件(Cipher Suite)列表, 加密组件是指所使用的加密算法及密钥长度等
② - Server Hello
重要参数:
- TLS的版本号
- 一个随机数 (Server Random)
- 选择的加密组件, 是从接收到的客户端加密组件列表中挑选出来的
③ - Certificate
重要参数:
- 服务器的公钥证书(被CA签名过的)
④ - Server Key Exchange
重要参数:
- 用以实现ECDHE算法的其中一个参数(Server Params); ECDHE是一种密钥交换算法, 为了防止伪造, Server Params经过了服务器私钥签名
⑤ - Server Hello Done
作用:
- 告知客户端: 协商部分结束
目前为止, 客户端和服务器之间通过明文共享了: Client Random、Server Random、Server Params。而且, 客户端也已经拿到了服务器的公钥证书, 接下来, 客户端会验证证书的真实有效性
⑥ - Client Key Exchange
重要参数:
- 用以实现ECDHE算法的另一个参数 (Client Params)
目前为止, 客户端和服务器都拥有了ECDHE算法需要的2个参数:Server Params、Client Params, 客户端、服务器都可以使用ECDHE算法根据Server Params、Client Params计算出一个新的随机密钥串: Pre-master secret, 然后结合Client Random、Server Random、Pre-master secret生成一个主密钥, 最后利用主密钥衍生出其他密钥:客户端发送用的会话密钥、服务器发送用的会话密钥等(注意: 这里是两个会话密钥: 客户端会话密钥用于客户端发送消息, 以及服务器对该消息进行解密; 服务端会话密钥用于服务器发送消息, 以及客户端对该消息进行解密)
⑦ - Change Cipher Spec
作用:
- 告知服务器: 之后的通信会采用计算出来的会话密钥进行加密
⑧ - Finished
作用:
- 包含连接至今全部报文的整体校验值(摘要), 加密之后发送给服务器; 这次握手协商是否成功, 要以服务器是否能够正确解密该报文作为判定标准
⑨ - Change Cipher Spec、⑩ - Finished
作用:
- 到此为止, 客户端服务器都验证加密解密没问题, 握手正式结束, 后面开始传输加密的HTTP请求和响应