定义
在http之下增加的一个安全层,用于保障HTTP的加密传输。
和http的区别
本质
在客服端和服务器之间用非对称加密协商出一套对称密钥,每次发送信息之前将内容加密,收到之后解密,达到内容的加密传输
TLS
用于两个应用程序之间提供保密性和数据完整性。
它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,可以理解为SSL 3.1,它是写入了 RFC的。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面
TLS协议提供的服务主要有
1、认证用户和服务器,确保数据发送到正确的客户机和服务器;
2、加密数据以防止数据中途被窃取;
3、维护数据的完整性,确保数据在传输过程中不被改变。
Https连接
- 客服端请求建立TLS连接
- 服务器发回证书
- 客服端验证服务器证书
- 客服端信任服务器后,和服务器协商对称密钥(使用非对称加密的方法)
- 使用对称密钥开始通信
PreMaster Secret是在客户端使用RSA或者Diffie-Hellman等加密算法生成的。它将用来跟服务端和客户端在Hello阶段产生的随机数结合在一起生成 Master Secret。
在客户端使用服务端的公钥对PreMaster Secret进行加密之后传送给服务端,服务端将使用私钥进行解密得到PreMaster secret。也就是说服务端和客户端都有一份相同的PreMaster secret和随机数。
客服端和服务器在得到PreMaster Secret之后,会用客服端的随机数+服务器的随机数+PreMaster Secret 生成一个 Master Secret,再通过Master Secret生成 客户端加密密钥,服务端加密密码,客户端MAC secret,服务端MAC secret
| 秘钥名称 | 秘钥作用 |
|---|---|
| client_write_MAC_key | 客户端发送数据使用的摘要MAC算法 |
| server_write_MAC_key | 服务端发送数据使用摘要MAC算法 |
| client_write_key | 客户端数据加密,服务端解密 |
| server_write_key | 服务端加密,客户端解密 |