https流程

发布时间 2023-12-25 09:45:47作者: 朝阳1

     第一步:客户端向服务端发起请求

      a.  客户端生成随机数R1 发送给服务端

      b.  告诉服务端自己支持哪些加密算法和哈希算法

      第二步:服务器向客户端发送数字证书

      a.  服务端生成随机数R2

      b.  从客户端支持的加密算法中选择一种双方都支持的加密算法(此算法用于后面的会话密钥生成)和哈希算法用机构的证书公钥解密得到证书的内容和证书签名

      c.  服务端生成把证书、随机数R2、会话密钥生成算法,一同发给客户端

      第三步:客户端验证数字证书。

       这一部分是浏览器内置的 TSL 完成的:

       a.  首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥、会话密钥生成算法、随机数R2。
       b.  用机构的证书公钥解密得到证书的内容和证书签名,内容包括网站的网址、网站的公钥、证书的有效期等。浏览器会先验证证书签名的合法性。签名通过后,浏览器验证证书记录的网址是否和当前网址是一致的,不一致会提示用户。如果网址一致会检查证书有效期,证书过期了也会提示用户。这些都通过认证时,浏览器就可以安全使用证书中的网站公钥了。
       c.  浏览器生成一个随机数 R3,根据会话密钥算法使用R1、R2、R3生成会话密钥。

       d.  用服务端证书的公钥加密随机数R3并发送给服务端。

      注意:以上其实就是 HTTPS 的握手过程,这个过程主要是认证服务端证书(内置的公钥)的合法性。因为非对称加密计算量较大,整个通信过程只会用到一次非对称加密算法(主要是用来保护传输客户端生成的用于对称加密的随机数私钥)。后续内容的加解密都是通过一开始约定好的对称加密算法进行的。

      第四步:服务器得到会话密钥

      a.  服务器用私钥解密客户端发过来的随机数R3

      b.  根据会话密钥算法使用R1、R2、R3生成会话密钥

      第五步:客户端与服务端进行加密会话

      1) 客户端发送加密数据给服务端

      发送加密数据:客户端加密数据后发送给服务端。

      2)服务端响应客户端

      解密接收数据:服务端用会话密钥解密客户端发送的数据

      加密响应数据:用会话密钥把响应的数据加密发送给客户端。

      3)客户端解密服务端响应的数据

      解密数据:客户端用会话密钥解密响应数据