1.网络传输的安全隐患

  从客户端到服务器,中间要经过很多的节点。如平常在家使用网络。从我们的电脑---路由器---猫---小区的---区---市........一直到目标服务器。那么在这个中间,这么多节点都可以获取到传输的数据。如果不对数据进行加密的话,就可能被某一个节点盗取或者伪造等。

 

2.对称加密

  对称加密是指客户端和服务器端都拥有相同的密码,一端加密,一端解密。但是,密码怎么从一端传输到另一端呢,这同样存在安全问题

  

3.非对称加密

  非对称加密的关键是公钥-私钥。公钥是通过私钥获取的。

    公钥加密的私钥可解,私钥加密的公钥也能解,但是公钥加密的公钥不能解。

    客户端先和服务器进行三次握手,建立稳定连接。第四次握手"hello",确定数据的加密算法(1),并且服务器把公钥传输给客户端。客户端使用加密算法(1)对数据进行加密。再把密码使用公钥进行加密(2)。注意这里有两套加密算法,一套是加密数据的算法-对称加密算法,一套是加密密码的算法-私钥-非对称加密。然后把加密后的数据和密码传给服务器,服务器获取后,使用私钥解密获取密码,再通过密码解密获取数据。

  1.三次握手建立稳定连接

  2.第四次握手,确定对称加密算法,并且服务器把服务器.公钥发送给客户端。在这个过程中,所有在建节点都获取了这个公钥

  3.客户端对数据使用对称加密算法进行加密,会有一个解密密码,并且使用服务器.公钥对解密密码进行加密,把对称加密后的数据和非对称加密后的解密密码传输出去

  4.中间节点可以获取这些信息。它手上拿有服务器.公钥,但是服务器.公钥加密过的解密密码是无法通过公钥解密的,所以无法获取对称加密的密码

  5.服务器获取后,通过私钥解密获取对称加密的密码,在通过密码解密获取数据

  但是,在这个过程中,还是可能存在问题。中间的节点可以伪造服务器公钥。在步骤2,它可以使用自己的私钥创建公钥返回给客户端,这样子客户端使用,的是中间节点提供的公钥加密密码,中间节点就可以解开。

  可能还有一个疑问:为什么不直接使用非对称算法加密要传输的数据呢?因为效率问题,非对称加密的效率要远远低于对称加密。所以使用非对称加密一个密码采用对称加密加密数据,远比直接非对称加密传输的数据来的高效

 

4.证书

  为了解决上面的中间节点伪造的问题,加入了一个中间人-证书颁发者。

    证书颁发者:收到信任的中间人。比如阿里是证书颁发者,可以颁发证书

   需要证书时,需要向证书颁发单位提供公钥(服务器.公钥)、营业执照、域名等信息

   证书颁发者通过自己的私钥-证书颁发者.私钥对(服务器.公钥、营业执照、域名等信息进行加密,生成证书,把证书颁发给服务器端。证书颁发者的公钥会内嵌在在计算机的操作系统里面,这一点非常重要。

  这样子第2步服务器端返回给客户端的就不是自己的公钥,而是证书了

  1.三次握手建立稳定连接

  2.第四次握手,确定对称加密算法,并且服务器把服务器信息-证书发送给客户端。在这个过程中,所有中间节点都获取了这个证书

  3.客户端获取系统内置的颁发者-公钥,使用公钥解密,获取服务器.公钥,服务器域名等信息。客户端对数据使用对称加密算法进行加密,会有一个解密密码,并且使用服务器.公钥对解密密码进行加密,把对称加密后的数据和非对称加密后的解密密码传输出去

  4.中间节点可以获取这些信息。它手上也有证书,也可以获取颁发者.公钥解密,获取服务器.公钥,但是服务器.公钥加密过的解密密码是无法通过公钥解密的,所以无法获取对称加密的密码

  5.服务器获取后,通过私钥解密获取对称加密的密码,再通过密码解密获取数据

  在这个过程中,加入了证书,中间节点无法伪造公钥。

  第二步,服务器传输证书,经过中间节点,中间节点可以解开证书,获取服务器.公钥等信息。但是它没有颁发者.私钥,把服务器.公钥替换成自己的公钥后,无法使用私钥加密,也就是不能伪造证书。也就是说,中间节点只能返回使用颁发者颁发的证书,如果他自己去申请证书,把中间节点.证书返回,但是证书是包含了域名信息的,域名信息对应不上,替换也是失败的。

 

  为什么有了非对称加密,不直接使用非对称加密对数据进行加密,而是先使用对称加密对数据进行加密,再通过非对称加密对对称加密的密码进行加密呢?

  因为,对称加密的效率远远高于非对称加密

 

  还可能存在下面这种情况:

    客户端加密好数据,发现服务端,经过中间节点的时候

    中间人不去解密数据,而是造假数据,使用证书颁发者的公钥对证书进行解密,获取到服务器公钥
    使用伪造的密码m1通过对称算法对伪造的数据d1进行加密获得 s2,再使用服务器的公钥对伪造的密码m1进行加密 s1
    再把s1、s2都交给服务器
    服务器通过服务器私钥对s1进行解密获得m1,通过m1对s2进行解密,获得d1
    那么服务器获取的就是假数据了

    服务器是否是通过数据里面的标识来判断数据的真伪的呢?比如说cookie?

 

5.证书颁发者信任问题 

  在上述中,加入了中间颁发者,如果证件颁发者造假,那就没有办法了。所以只有被广大用户任性的格式颁发的证书才被认可

  而银行等对安全要求极高的单位,对任何中间颁发者都不信任。

  所有银行一般对于大客户,通常开通网上银行,会给他们一个物理的密码狗。