前置知识
在阅读本文章之前需要知道什么是哈希,什么是对称加密,什么是非对称加密,什么是数字证书,什么是数字签名? 什么是数字证书(Digital Certificate)?什么是数字签名(Digital Signature)_codereasy的博客-优快云博客
SSL/TLS协议是什么
其中SSL/TLS
是一种介与于传输层(比如TCP/IP
)和应用层(比如HTTP
)的协议。它通过"握手协议(Handshake Protocol)
"和"传输协议(Record Protocol)
"来解决传输安全的问题。SSL/TLS
是一个可选层,没有它,使用HTTP
也可以通信.
SSL/TLS的运行过程
SSL/TLS有两个阶段:握手协议
和传输协议
握手协议
就是建立起连接的过程。在这个阶段,我们采用非对称加密,这个过程完毕后会生成一个对话秘钥。
这个对话秘钥
使用对称加密进行传输。为什么不从头到尾都使用非对称加密?之因为非对称加密是很耗性能的。而握手协议过程中,迫不得已,使用非对称加密。在数字证书的加密与验证的过程中,使用非对称加密保证了公钥的安全性。
SSL/TLS运行过程
客户端发送请求:
在这一步客户端主要向服务端发出以下信息:
- 支持的
SSL/TLS
协议版本 - 支持的加密套件列表
(cipher suite)
- 支持的压缩算法列表
(compression methods)
,用于后续的压缩传输 - 产生的一个随机数
random_C(random number)
,客户端有存留,稍后用于生成"对话密钥(session key)"
服务端回应:
服务端接收到客户端的请求,进行回应
- 根据客户端支持的
SSL/TLS
协议版本,和自己的比较确定使用的SSL/TLS
协议版本,如果没有合适的,对话关闭 - 回应加密套件,压缩算法
- 产生的一个随机数
random_S(random number)
,服务端有存留,稍后用于生成"对话密钥(session key)"
- 服务端数字证书(证明自己的身份,传递公钥)
- 如果需要验证客户端,发出请求,要求客户端提供证书
客户端回应:
客户端收到服务端的回应后。会进行以下操作:
首先,客户端会验证服务端的数字证书。如果证书有问题,则会有相应提示。如果证书没有问题继续向服务端发送以下信息:
- 如果服务端有请求证书,发送自己的数字证书
- 在产生一个随机数
pre-master key(random number)
,并且用服务端数字证书中的公钥加密 - 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
服务端的回应(最后一步)
如果有客户端的证书,就先验证客户端的证书
- 使用自己的私钥,对随机数
pre-master key
解密,这时客户端和服务端各自有了三个随机数,然后用原来协商的加密方式生成本次通话使用的会话密钥(session key)
- 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
这时客户端和服务端都有了session key
。下面开始使用 session key
对称加密数据,进行传输,就进入了下一个阶段,传输协议过程。
参考资料: