TSL握手小记
超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为 HTTP over TLS,HTTP over SSL 或 HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。
HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 协议来加密数据包。
TLS 协议位于传输层之上,应用层之下,使用了两种加密技术,分别为:对称加密和非对称加密。使用非对称密钥加密用于传输对称密钥来保证传输过程的安全性,之后使用对称密钥加密进行通信来保证通信过程的效率。
对称加密
加密与解密使用相同密钥。
- 优点:运算速度快;
- 缺点:无法安全地将密钥传输给通信方。
非对称加密
加密与解密使用不同密钥,包含一个公钥和一个私钥。明文既可以用公钥加密,用私钥解密;还可以用来进行签名,用私钥加密,用公钥解密。
- 优点:运算速度快;
- 缺点:无法安全地将密钥传输给通信方。
TLS 握手过程
客户端先向服务端发送一个加密通信请求,叫做 ClientHello 请求。该请求包含以下信息:
- 客户端支持的 SSL 或者 TLS 版本
- 客户端生成的随机数
- 客户端支持的加密算法
服务端收到客户端请求后,向客户端发出响应,叫做 ServerHello。该响应包含以下信息:
- 服务端从客户端提供的 SSL 或 TLS 列表中选择的版本
- Sesstion ID 和 另外生成的随机数
- 服务端的数字证书
- 确认使用的加密算法
客户端收到服务端响应后,首先校验服务端发来的数字证书决定是否继续通信。
证书校验通过,会像服务端发送以下信息:
- 生成一个随机数,并对这个随机数用从服务端数字证书中取出的公钥加密
如果服务端发送了一个客户端证书请求,客户端将会发送一个用客户端私钥加密的随机字符串和客户端的数字证书,或者没有数字证书的警告。
服务端接受并验证客户端证书,通过这三个随机值按照之前约定的加密方式生成密钥。
客户端向服务端发送一条完成的消息,该消息使用密钥加密,表示握手的客户端部分已经完成。
服务端向客户端发送一条完成的消息,该消息使用密钥加密,表示握手的服务端部分已经完成
在 SSL 或 TLS 会话期间,服务端和客户端现在可以交换使用共享密钥对称加密的消息