SSL/TLS协议

  SSL/TLS是一种介与于传输层(比如TCP/IP)和应用层(比如HTTP)的协议。它通过"握手协议(Handshake Protocol)"和"传输协议(Record Protocol)"来解决传输安全的问题。SSL/TLS是一个可选层,没有它,使用HTTP也可以通信,它存在的目的就是为了解决安全问题,这也就是HTTPS相对于HTTP的精髓所在。

  SSL/TLS运行过程概述
  SSL/TLS有两个阶段握手协议传输协议握手协议就是建立起连接的过程,这个阶段采用非对称加密,这个过程完毕后会生成一个对话秘钥,从而传输协议过程,就是用这个对话秘钥使用对称加密进行传输
  

  客户端发出请求(Client Hello)

  对应上图第一步,客户端发出请求,这一步客户端主要向服务端提供以下信息:

  • 支持的SSL/TLS协议版本
  • 支持的加密套件列表(cipher suite)
  • 支持的压缩算法列表(compression methods),用于后续的压缩传输
  • 产生的一个随机数random_C(random number),客户端有存留,稍后用于生成"对话密钥(session key)"
  服务端回应(Server Hello)

  收到客服端的请求之后,服务端向客户端回应以下信息:

  • 根据客户端支持的SSL/TLS协议版本,和自己的比较确定使用的SSL/TLS协议版本,如果没有合适的,对话关闭
  • 回应加密套件,压缩算法
  • 产生的一个随机数random_S(random number),服务端有存留,稍后用于生成"对话密钥(session key)"
  • 服务端数字证书(证明自己的身份,传递公钥)
  • 如果需要验证客户端,发出请求,要求客户端提供证书
  客户端回应

  客户端收到服务端的回应后,首先验证服务端的数字证书,如果证书没有问题继续下去,如果证书有问题,则会有相应提示,或者对话直接关闭。然后客户端在向服务端发送以下信息:

  • 如果服务端有请求证书,发送自己的数字证书
  • 在产生一个随机数pre-master key(random number),并且用服务端数字证书中的公钥加密
  • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
  服务端最后的回应

  如果有客户端的证书,就先验证客户端的证书

  • 使用自己的私钥,对随机数pre-master key解密,这时客户端和服务端各自有了三个随机数,然后用原来协商的加密方式生成本次通话使用的会话密钥(session key)
  • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送

  这时客户端和服务端都有session key,然后握手协议阶段就结束了。下面开始使用session key对称加密数据,进行传输,就进入了下一个阶段,传输协议过程。

  
  
posted on 2019-08-24 22:14  溪水静幽  阅读(128)  评论(0)    收藏  举报