HTTPS加密协议(TLS/SSL)浅析

2018-05-07  本文已影响41人  RasonWu

其实写这样的文章很多,我也只是写给iOS看的,关键原理理解到位就可以。由于http是明文传输的,为了防止被篡改,所以有了SSL协议,为了保证客户端到服务器的安全。其实最关键的还是PKI体系,身份验证CA和证书链、证书吊销。

  1. 我们需要向CA机构提供域名、公钥(申请人提供的,私钥始终保持在自己服务器才有)等信息,CA审核并颁发用私钥(CA机构的,并不是服务器的)加密的证书。
  2. 客户端验证证书,会内置信任CA的证书信息(包括公钥),所以本地就可以验证证书是不是合法的。有人可能会说,那我换成自己的合法证书行不行?答案肯定是不行的。因为他还会验证域名信息是不是能匹配上。所以这样就能保证证书一定是你的证书,而不会是被篡改后的证书。
  3. 当然也有吊销的机制,毕竟服务器的证书也是有暴露的可能的,比如你的服务器被黑了,人家就拿到你的证书了。主要还是通过两种方式,一种是证书吊销列表,也是存在一个网址,但是并不是实时更新的,另外一个是实时查询证书是否被吊销的网址。
  1. 客户端发起申请,明文传输信息,包含版本信息,加密套件候选列表(身份验证算法、密钥交换算法、对称加密算法、信息摘要等),压缩算法候选列表,随机数,扩展字段等信息。其实就是发送信息给服务器,让服务器选
  2. 服务器在收到客户端的信息之后:选择第一步中选择指定的版本、加密套件、算法等,并生成随机数。证书链。通知客户端server_hello 信息发送结束。选择指定的方案,并告诉客户端
  3. 客户端在验证身份之后,生成第三个随机数(pre_master),并通过服务器证书加密发送回服务器。这时候就已经得到协议密钥。告诉服务器后面都是用协商密钥和算法进行通讯。并且把前面的通讯信息的hash值和相关的信息生成一段数据,并根据协商密钥和算法加密,并发回服务器。由于进行身份验证,并使用服务器的证书。那么就可以保证客户端发送的东西,就确定是某服务器没错了。用服务器证书加密,那么可以保证协议密钥只有服务器和客户端本身知道。所以根据第三个随机数生成的协议密钥,就只有两方知道。hash值和相关信息是为了验证信息没有被篡改,因为第三方还可能修改第一步ssl协议版本候选,降低安全性,从而实行破解。
  4. 服务器通过自己的私钥解密对应的信息,并验证数据是否被修改。服务器也根据第三个随机数,也可以得到协商密钥。并对相关数据进行校验。没有问题的话,也需要告诉客户端,后面都用协商密钥和算法进行通讯。同上面一步一样,也需要告诉客户端所有自己计算的hash值和相关信息。服务器验证数据是否有被篡改
  5. 客户端接收到hash值和相关信息,验证通过则握手完成。客户端验证通过,握手成功

其实上面也对服务器身份进行了验证,如果客户端也需要认证的话,就需要U盾一样的数字证书。
当然,如果想更详细的可以看下面一套东西
HTTPS加密协议详解(四):TLS/SSL握手过程

上一篇 下一篇

猜你喜欢

热点阅读