本文介绍目下的https协议,是如何进行加密的

很久很久以前,数据都是明文传输的,这样的方式毫无安全可见。中间人可以随意获取甚至篡改数据,那现在的什么网上购物、支付等几无可能。后来就出现了https,在http的基础之上,加了一个安全套接层,它的作用,就是用来对数据进行加密和解密。熟悉osi七层模型的同学都很清楚,http是应用层协议,下面还有传输层的tcp和网络层ip。加密解密的操作,可以看作介于应用层和传输层之间,也就是货物上路之前的和卸货时的时间点。

对称加密和非对称加密

形象的比喻,对称加密就是一把钥匙,既能加密,也能解密。而非对称加密则是,加密一把钥匙,解密一把钥匙。

加密策略的演进历程

  1. 纯对称加密
    发送请求前,浏览器会给s端发送加密相关的东西: 加密套件加密列表.前者就是加密的具体方法,后者指的是浏览器能够支持的哪些方法。s端收到东西之后也会给c端返回数据。这里可以浅显的理解为使用的加密方式,也就是对称加密的钥匙。这样,浏览器之后发送的所有请求,都会用这把钥匙进行加密,到了服务器端,再用这把钥匙进行解密。

缺点: 那把钥匙,在传输过程中,也是明文的,因此问题并未解决。

  1. 对称加密
    同对称加密一样,浏览器会给c端发送加密套件和加密列表。s端收到东西后,也是会给c端一把钥匙,但是这把钥匙用来加密用的。就是说,浏览器后续发送的数据,都会用公钥加密处理但是,解密只能由s端的私钥才能完成。也就是说,即使中间人截获了c端发给s端的数据,他也无法解密截获的内容。通过公钥加密、私钥解密的操作,可以解决纯对称加密的缺点,但也存在问题:

    • 效率低下。说白了就是慢
    • 只解决了c端往s端发送数据时的安全问题,但s端往c端发送数据,依然是明文不完全的。
  2. 对称加密和非对称加密的结合
    总体的逻辑: c端通过对称加密生成钥匙,但是这把钥匙,会通过s端的公钥加密给到s端,这样对称加密的钥匙,就只有s端能获取。然后,返回的数据,都会用这把钥匙加密给到c端,c端再用这把钥匙解密。

仍有遗憾
对称加密和非对称加密混合的方案,看似完美,但也有缺憾。试想一下,如果黑客通过dns劫持,篡改了域名,用户以为自己访问的对象是李逵,但实际上是李鬼。因此,前辈们又引出了数字签名的概念。说白了,就是存在一个中间的权威机构, 这个机构会发一种叫做CA的数字证书。s端要想证明自己是李逵,带着这个证明文件即可。