说一说HTTPS的秘钥交换过程。

liyan 8月前 ⋅ 46 阅读

    HTTPS的密钥交换过程如下:

  1. 客户端要访问一个网站,向支持https的服务器发起请求。

  2. 客户端向服务器发送自己支持的秘钥交换算法列表。

  3. 服务器选取一种秘钥交换算法加上CA证书返回给客户端。

  4. 客户端验证服务器是否合法,并生成一个随机数然后用协商好的加密算法加密生成随机秘钥,并用刚才从CA证书中拿到的公钥对其加密后发送给服务器。

  5. 服务器收到后用自己的私钥解密(中间人没有服务器的私钥,所以没有办法看到传输的数据,另外确认秘钥交换算法是在第一步,中间人是不知道秘钥交换算法(中间人是无法在第一步做手脚的,那等同于它自己就是一个真实客户端发起了一个新的请求,唯一一种情况攻击人有一个合法CA下发的证书,且客户端(一般为安卓设备)没有对CA下发的证书中的内容网站地址和当前请求地址做对比校验),就算攻击者有公钥,因为不知道协商协议,所以做不出来随机秘钥,顶多就是在传输过程中将报文拦截下来,乱改,但是给到服务器后,私钥是解不开乱改之后的密文的)。

  6. 服务器私钥解密之后,拿到对称秘钥,并且用它再加密一个信息,返回给浏览器。

    注意:最关键的一步就是在客户端采用 RSA 或 Diffie-Hellman 等加密算法生成 Pre-master,这个随机秘钥是用来计算最终的对称秘钥的,用公钥加密之后攻击人是不知道这个这个随机秘钥的,只有服务器才能解的开。


全部评论: 0

    我有话说: