60 lines
2.0 KiB
Markdown
60 lines
2.0 KiB
Markdown
|
### 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完毕
|
|||
|
- 后续所有数据采用加密传输
|
|||
|
|