### HTTPS - 超文本传输安全协议 - HyperText Transfer Protocol Secure - HTTP over TLS, HTTP over SSL - 默认占用端口443 ### TLS、SSL - TLS Transport Layer Security传输层安全协议 - SSL Secure Socket Layer 安全套接层 - 工作在传输层和应用层之间 ### TLS 流程 ![](https://blog-heysq-1255479807.cos.ap-beijing.myqcloud.com/blog/wiki/http/tls.png) ![](https://blog-heysq-1255479807.cos.ap-beijing.myqcloud.com/blog/wiki/http/https.jpg) #### 客户端发送 `client hello` - TLS 版本号 - 支持的加密组件列表 - 使用的加密算法以及秘钥长度 - 一个随机数字 client random(用途:防止连接重放) #### 服务发送 `server hello` - TLS版本号 - 从客户端发送的加密组件列表中选择的加密方式 - 一个随机数 server random #### 服务端发送 `Certificate` - 服务器被CA签名过的公钥证书 #### 服务端发送 `Server Key Exchange` - 实现`ECHDE`算法的其中一个参数(Server Params) - Server Params 经过了服务端私钥签名 #### 服务端 `Server Hello Done` - 告知客户端,服务端发送完毕,协商过程结束 - 明文共享 - client random - server random - server params - 服务端公钥证书 #### 客户端发送 `Client Key Exchange` - 实现`ECHDE`算法中的另一个参数(Client Params) - 客户端和服务端此时都有了 Client Params 和 Server Params - 用 ECHDE 算法和两个Params 生成随机秘钥串 pre-master - 用client random,server random和pre-master生成主秘钥 - 主密钥衍生出,客户端和服务端发送用的会话秘钥 #### 客户端发送 `Change Ciper Spec` - 告知服务端之后的通信会采用计算出来的秘钥进行加密通信 #### 客户端发送 `Finished` - 连接至今全部报文的整体校验值(摘要),加密之后发送给服务端 #### 服务端发送 `Change Ciper Spec`和`Finished` - 服务端解密检查报文没有问题,然后TLS完毕 - 后续所有数据采用加密传输