目录
一、对称加密
二、非对称加密
三、中间人攻击
四、证书
HTTPS协议就是在HTTP协议之上加上了一个SSL协议,将原来的明文传输转化为密文传输,使信息在传输时候的安全性大大提高。接下来我将介绍一下HTTPS加密的流程。
进行安全传输,其中最核心的技术就是加密,而其中最为简单、有效的方法就是“对称加密”。对称加密的方式如下:
A(明文)+ key => B(密文)。加密的过程
B(密文)+ key => A(明文)。解密的过程
其中key就表示密钥,是一串数字或者字符串。同一个密钥可以用来加密也可以用来解密,因此就称其为“对称密钥”。但是其保证安全性的前提是,不能让密钥被他人知道,如果密钥被一些不法之徒获取,那么这个加密也就形同虚设了。
上面这张图表示了一个黑客劫持了请求内容。但是,如果黑客只劫持到了请求内容,而不知道密钥,那么也威胁不到请求的安全。但是,密钥是谁产生的呢?它能否保证密钥不让黑客知道吗?我们现在来讨论一下:假设是客户端产生的。
上图是客户端生成密钥,发送给服务器。此时密钥刚刚生成,如果想要给服务器发送过去,势必需要明文传输。因为如果使用密文传输,那么就形成了一个无解的情况。因为这里是明文传输,那么密钥就可能被黑客劫持到。因此要想安全的关键在于如何将密钥安全的传输给服务器。因此就得引入非对称加密。
非对称加密就是,生成一对密钥,一个叫公钥一个叫密钥。加密方式如下:
明文 + 公钥 => 密文。
密文 + 私钥 => 明文。
其中,明文也可以使用私钥加密,密文可以使用私钥解密。公钥是可以公开的,私钥是私密的。
首先服务器生成一对公钥私钥。其中客户端持有公钥,服务器持有私钥。由于客户端的公钥从服务器获取,因此黑客也可以知道公钥。但是由于私钥只有服务器才知道,不会告诉别人。因此就算黑客知道了公钥,也无法解密。
接着客户端使用公钥来对对称密钥进行加密,传输给服务器,服务器通过私钥进行解密,获得对称密钥。此时客户端就可以使用这个对称密钥进行后续的传输工作。
但是由于非对称加密比较慢,对称加密比较快。因此一般使用非对称加密来进行对称密钥的加密传输。而用对称加密来进行后续的传输工作。
上面所说的非对称加密和对称加密好像是已经把要传输的数据保护的天衣无缝了。但是,其实其中还有一个巨大的漏洞。这就是我们所说的中间人攻击。
上图就是关于中间人攻击的一个介绍。实质上就是黑客在中间充当一个双面客。服务器将公钥pub1发送过来,黑客在中间劫持。并且自己生成了一对非对称密钥。将自己生成的pub2发送给客户端。但是由于客户端不知道发送来的pub2是不是服务器发送来的公钥,因此也就上当。将对称密钥通过pub2进行加密,发送给黑客。然后黑客将以pub2加密的对称密钥进行解密,那到对称密钥。再将对称密钥使用pub1进行加密,发送给服务器。由于服务器也不知道这个加密过的对称密钥是不是客户端发过来的,因此也就使用这个对称密钥进行后续的加密了。
从上述过程来说,客户端无法判断公钥的真假造成的。如果客户端可以辨别公钥的真假,那么这个中间人攻击也就迎刃而解了!
为了解决上述问题,人们就想出来了“证书”这个方法。就是上服务器(网站)在成立的时候,需要去一些专门的认证机构(第三方机构)申请证书。服务器需要提供一些资质。当申请通过之后,机构就会给你颁发证书。其中,证书中也就包含了公钥。此时客户端申请公钥的时候,此时就不应该只是请求要一个公钥了,而是请求要一个证书。当客户端拿到证书之后,就可以进行校验。验证证书是不是假的或者被篡改的。如果客户端发现证书是无效的,浏览器就会直接弹框警告。
上图是对服务器获取证书之后的流程。服务器将证书发送给客户端。客户端进行两次解密,解出hash1和hash2来进行校验,如果两个值相同,就说明证书是有效的。
黑客能否把公钥替换了??不能!!一旦黑客将公钥替换了,那么hash1和hash2算的值就不一样了,客户端就不知道了。并且黑客不知道认证机构的私钥,即使黑客自己算好了篡改后的hash值,也无法加密生成私钥。
注意,认证机构是有一对非对称密钥的。私钥用来加密hash值就得到了签名。公钥给客户端就可以解密签名获得hash值了。
上面就是HTTPS的加密流程了,如有错误,请您指出。