SSL握手流程

https在http的基础上多了SSL加密层。https的加密过程也就是SSL的握手过程。

ssl 加密算法 配置_服务端

为什么要有MAC密钥

MAC密钥相当于数据校验,是为了保证数据完整性而存在的。SSL将数据流分割成记录,每条记录都会附上一个MAC,然后再对“记录+MAC值”进行加密。比如客户端要向服务端发送数据,对于数据的每个记录,客户端都会用它的MAC密钥Mc对记录进行一次MAC计算生成一个MAC值,然后再用它的加密密钥Ec对“记录+MAC值”进行加密。不过需要注意SSL记录的类型、版本、长度不会参与加密。

ssl 加密算法 配置_ssl 加密算法 配置_02


如果黑客从中间捕获了两个报文段,并修改了TCP报文的序号,从而打乱了顺序,在没有MAC加密的情况下,接收端不会认为接收到的数据顺序有任何异常。但如果我们有了这个MAC加密的过程,并且让序号也参与MAC加密,那我们就可以防止黑客的这一行为。

在SSL握手的最后,客户端和服务端会互相发送之前所有报文的MAC。这么做的目的是为了确保之前的所有的连接都是安全的。服务端会将收到的MAC与自己计算的MAC相比较,如果不相同的话,服务端可以立即终止连接,而同样的,客户端也会做类似的检查。

为什么要用不重数

在SSL连接的最开始阶段,客户端和服务端有互相发送不重数,并且在接下来的阶段用这个不重数参与主密钥的导出。这样做的目的是为了防止“连接重放攻击”。如果黑客截取了客户端服务端之间所有的报文,然后第二天将这些报文段重新依次发送给服务端。在没有不重数的情况下,服务端不会察觉到任何异常,因为所有报文段的发送与接收都会和前一天一模一样,所有报文段都会通过MAC完整性检查。这样一来,黑客不用去获取密钥,也不用去知道每个报文段是什么内容,就完成了攻击。相反,如果使用不重数的话,黑客就无法得逞。因为每次的不重数都不一样,每次的密钥也都将不同,黑客的报文段无法通过MAC完整性检查,由此“连接重放攻击”得到了防御。

总结

  • 服务端有自己的公钥pk,私钥sk,公钥被加密在CA颁发的证书中
  • 公钥算法用于公钥加密前主密钥过程
  • MAC算法用于MAC加密过程
  • 对称算法用于SSL连接完成后的数据包加密过程
  • MAC密钥的作用是为了数据完整性检查
  • 不重数的作用是为了防止“连接重放攻击”