SSL/TLS

SSL/TLS

TLS协议由TLS记录协议与TLS握手协议叠加而成。底层的TLS记录协议负责加密,上层的TLS握手协议负责加密以外的工作。

  1. TLS记录协议
    位于TLS握手协议的下层,负责使用对称密码对消息加密。使用了对称加密与消息认证码,但具体的算法与共享密钥是通过握手协议在服务器与客户端之间协商决定的。
  2. TLS握手协议
    分为4个子协议
    1. 握手协议
      负责决定客户端与服务端之间的密码算法与共享密钥。基于证书的认证操作也是在这个协议中完成。
    2. 密码规格变更协议
      负责向通信对象传达变更密码方式的信号,当中途发生错误时就会通过警告协议发送给对方
    3. 警告协议
      负责在发生错误时将错误信息发送给对方
    4. 应用数据协议
      将TLS上承载的应用数据传达给通信对象的协议

协议内容

  1. TLS记录协议
    负责消息的压缩、加密、既数据认证。
    先分割成多个较短片段,进行压缩。然后加上消息认证码,通过附加消息认证码的MAC值,可以识别篡改。为防止重放攻击,在计算消息认证码时,加上片段的编号。具体的散列函数算法与消息认证码所使用的共享密钥都要与对象协商。
    经过压缩的片段再加上消息认证码会一起通过对称密码进行加密。加密使用CBC模式,CBC模式的初始化向量通过主密码生成。
    经过加密的数据再加上数据类型、版本号、压缩后的长度组成的报头就是最终数据。数据为4个子协议之一

2-1. 握手协议
负责生成共享密钥与交换证书。生成共享密钥是为了密码通信,交换证书是为了相互认证。
由于握手协议的信息交换是没有加密的情况下进行的,所以一切数据都有可能被窃听。因此,这一过程必须使用公钥密码或Diffie-Hellman交换。

2-2. 密码规格变更协议
最开始时,通信没有加密。通过这个协议更改使用的密码套件

2-3. 警告协议
发生错误时通知通信对象。

2-4. 应用数据协议
用于传递应用数据。

主密码

是TLS客户端和服务端协商出的秘密数值。TLS密码通信的机密性和数据的认证都依靠这个数值。主密码是一个48字节的数值。

计算过程:

主密码是客户端与服务器根据一下信息计算出来的

  • 预备主密码
  • 客户端随机数
  • 服务端随机数

使用RSA公钥加密时,客户端在发送ClientKeyExchange消息时,将经过加密的预备主密码一起发送给服务器。
当使用Diffie-Hellman密钥交换时,客户端在发送ClientKeyExchange消息时,将经过加密的预备主密码一起发送给服务器。
当使用Diffie-Hellman密钥交换时,客户端会在发送ClientKeyExchange消息时,将Diffie-Hellamn的公开值一起发送给服务器。根据这个值,客户端与服务器各自生成预备主密码。
客户端与服务端的随机数相当于防止攻击者事先计算出密钥的盐。

主密码的目的

  1. 对称密码的密钥(客户端 -> 服务端)
  2. 对称密码的密钥(客户端 <- 服务端)
  3. 消息认证码的密钥(客户端 -> 服务端)
  4. 消息认证码的密钥(客户端 <- 服务端)
  5. 对称密码的CBC模式使用的初始化向量(客户端 -> 服务端)
  6. 对称密码的CBC模式使用的初始化向量(客户端 <- 服务端)

SSL协议详解
图解HTTPS

posted @ 2021-01-14 16:31  某某人8265  阅读(176)  评论(0编辑  收藏  举报