什么是HTTPS
HTTPS是加密后的HTTP,相当于:HTTPS = HTTP + SSL/TLS
HTTPS是基于"密钥"来实现的,客户端将发送的数据用密钥进行加密,服务器将收到的数据用密钥解密.
对称加密和非对称加密
对称加密是指:交互双方共同使用同一个密钥进行加密 或 解密.
如下(图中的客户端和服务器里面的key是同一个):
客户端将报文a通过密钥加密后形成报文b
服务器将报文b通过密钥解密后得到报文a
如果有黑客入侵了中间节点,获取传输的数据,但是黑客没有密钥(key),他就无法得知报文的真正内容.
但是密钥的商定也是需要进行双方交互的.
假如:客户端要生成一个密钥,此时就需要将密钥发送给服务器,但是发送密钥的报文不可以加密,因为此时客户端还不知道密钥的内容,所以就需要明文传输,如果黑客此时获取到了密钥,那么加密就显得毫无意义.
此时就非对称加密的作用就体现了.
非对称加密:交互双方使用两个密钥(公钥和私钥)分别进行 加密 或 解密
客户端: 报文a + 公钥 = 报文b
服务器: 报文b + 私钥 = 报文a
也就说:公钥用来加密但是不能用来解密,私钥可以用来解密但是不可以用来加密.
此时再回到上面的请况:
由于公钥和私钥是由服务器生成的,所以客户端的公钥是通过服务器获取的,而这个公钥的传输是没有加密的,黑客也可以知道,然后客户端使用这个公钥来对报文进行加密,服务器使用私钥进行解密,但是由于黑客不知道私钥,所以他就无法对报文进行解密,此时针对上面的请况就可以有效解决了.
那么非对称加密这么安全还为什么要用对称加密呢?
因为非对称加密进行解密的时候慢,而对称加密进行解密的时候快.
所以实际操作的时候,同时是使用公钥和私钥约定好一个对称密钥(这个对称密钥黑客无法解析),然后在使用对称密钥来传递信息,此时既提高了效率,又增强了安全性.
中间人攻击
前面提到的对称加密和非对称加密,虽然在一定程度上避免了外界对于信息的盗取/修改,但是仍然会存在一些问题,比如现在说到的中间人攻击.
在非对称加密中,我们通过这种加密方式,使得黑客在正常通信传输的情况下无法获取到真正的信息,但是如果黑客将发送的数据掉包了呢?
如下图:
证书
基于上面的问题,我们可以引入"证书"来解决.
上面的情况,会别黑客成功的本质原因就是:客户端不知道当前的信息是不是服务器发过来的,那么我们解决了这个问题,中间人攻击的问题也就迎刃而解了.
证书,它其实就是第三方认证机构提供的一个资质,服务器可以通过这个证书将公钥进行传递,而客户端也可以对这个证书进行验证操作,判断这个证书是否被人篡改过了.
如下图:
在服务器设立之初, 就需要去专门的认证机构去申请证书.当审核通过后,就会给你颁发证书.
然后服务器就可以使用这个证书去传递公钥给客户端,客户端再对证书进行校验,然后再进行之后的交互.
那么黑客是否可以修改证书呢?
答案是不可以.
在证书中除了一些字段和公钥之外,还有一个签名,这个签名是认证机构使用它自己的密钥对证书的整体进行运算后得到的一个加密的字符串.如果里面有内容发生了改变,那么客户端使用认证机构提供的公钥解密后得到的签名就会不一样,此时客户端就知道这个证书的内容发生了改变,就不会轻易的将密钥发送过去了.