https
-
HTTPS (HyperText Transfer Protocol Secure) ,译为:超文本传输安全协议
1、常称为HTTP overTLS、HTTP over SSL、HTTP Secure
2、由网景公司于1994年首次提出 -
HTTPS的默认端口号是443 (HTTP是80)
SSL/TLS
-
HTTPS是在HTTP的基础上使用SSL/TLS来加密报文,对窃听和中间人攻击提供合理的防护
-
SSL/TLS也可以用在其他协议上,比如:
1、FTP→FTPS
2、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工作在哪一层
工作在应用层和传输层之间,分为握手层和记录层。
图片.pnghttps的成本
- 证书的费用
- 加解密的计算
- 降低了访问速度
- 有些企业的做法是:包含敏感数据的请求才使用HTTPS,其他保持使用HTTP
https的通信过程
总的可以分为3大阶段
- TCP的3次握手
- TLS的连接
- HTTP请求和响应
TLS 1.2 连接
TLS 1.2连接大致需要10个步骤
图片中省略了中间产生的一些ACK确认
通过wireshark抓包,可以看到大致过程。
抓包.pngTLS连接第一步:Client Hello
- TLS的版本号
- 支持的加密组件(Cipher Suite) 列表
加密组件是指所使用的加密算法及密钥长度等 - 一个随机数(Client Random)
TLS连接第二步:Server Hello
- TLS的版本号
- 选择的加密组件
是从接收到的客户端加密组件列表中挑选出来的 - 一个随机数(Server Random)
TLS连接第三步:Certificate
- 服务器的公钥证书(被CA签名过的)
TLS连接第四步:Server Key Exchange
- 用以实现ECDHE算法的其中一个参数(Server Params)
ECDHE是一种密钥交换算法
为了防止伪造,Server Params经过了服务器私钥签名
TLS连接第五步:Server Hello Done
- 告知客户端,协商部分结束
- 目前为止,客户端和服务器之间通过明文共享了
Client Random、 Server Random、 Server Params- 而且,客户端也已经拿到了服务器的公钥证书,接下来,客户端会验证证书的真实有效性
TLS连接第六步: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生成用以加密会话的会话密钥
TLS连接第七步:Change Cipher Spec
- 告知服务器:之后的通信会采用计算出来的会话密钥进行加密
TLS连接第八步:Finished
- 包含连接至今全部报文的整体校验值(摘要) ,加密之后发送给服务器
- 这次握手协商是否成功,要以服务器是否能够正确解密该报文作为判定标准
TLS连接第九步:Change Cipher Spec
- 服务器验证第八步客户端发送的加密内容没问题后
- 告知客户端:之后的通信会采用计算出来的会话密钥进行加密
TLS连接第十步:Finished
- 包含连接至今全部报文的整体校验值(摘要) ,加密之后发送给客户端
到此为止,客户端服务器都验证加密解密没问题,握手正式结束
后面开始传输用上面协商的加密方式加密后的的HTTP请求和响应
网友评论