01.为何会有Https
Http的缺点
通信使用明文
通信使用明文意味着安全性大大降低,当通信过程被窃听后,无需花费额外的投入就可看到传输的数据。
例如使用抓包工具,无需任何配置就可查看任何使用HTTP协议的通信数据;
不验证通信方身份
不验证通信方的身份,将导致通信过程被窃听后,可能会遭遇伪装,例如使用抓包工具抓取数据后,就可按照数据包的格式构造HTTP请求;任何人都坑你发送请求,不管对方是谁都返回相应。
无法验证报文的完整性
不验证报文的完整性,数据在传输过程中就可能被篡改,本来想看杨充呢,结果数据在传输过程中被换成了逗比。
遭到篡改,即没有办法确认发出的请求/相应前后一致。
Http的缺点解决方案
通信使用明文
既然明文不安全,那可以考虑使用密文,即:对通信数据进行加密。即便数据被窃听,对方依然需要花费一定的投入来破解,这种高昂的成本间接提高安全级别。
不验证通信方身份
和服务端使用相同的算法,根据网络请求参数生成一个token,请求/应答时根据token来确定双方的身份。
无法验证报文的完整性
使用MD5/SHA1等算法进行完整性验证,对方接收到数据后,根据同样的算法生成散列值,比对发送方生成的散列值,即可验证数据的完整性。
你知道Http存在哪些风险吗?
窃听风险:Http采用明文传输数据,第三方可以获知通信内容
篡改风险:第三方可以修改通信内容
冒充风险:第三方可以冒充他人身份进行通信
如何解决这些风险
SSL/TLS协议就是为了解决这些风险而设计,希望达到:所有信息加密传输,三方窃听通信内容;具有校验机制,内容一旦被篡改,通信双发立刻会发现;配备身份证书,防止身份被冒充
SSL原理及运行过程
SSL/TLS协议基本思路是采用公钥加密法(最有名的是RSA加密算法)。大概流程是,客户端向服务器索要公钥,然后用公钥加密信息,服务器收到密文,用自己的私钥解密。
为了防止公钥被篡改,把公钥放在数字证书中,证书可信则公钥可信。公钥加密计算量很大,为了提高效率,服务端和客户端都生成对话秘钥,用它加密信息,而对话秘钥是对称加密,速度非常快。而公钥用来机密对话秘钥。
02.解决方案分析
Https加密方式
Https=Http+Ssl
Https保证了我们数据传输的安全,Https=Http+Ssl
之所以能保证安全主要的原理就是利用了非对称加密算法,平常用的对称加密算法之所以不安全,是因为双方是用统一的密匙进行加密解密的,只要双方任意一方泄漏了密匙,那么其他人就可以利用密匙解密数据。
非对称加密算法之所以能实现安全传输的核心精华就是:公钥加密的信息只能用私钥解开,私钥加密的信息只能被公钥解开。
非对称加密算法为什么安全
服务端申请CA机构颁发的证书,则获取到了证书的公钥和私钥,私钥只有服务器端自己知道,而公钥可以告知其他人,如可以把公钥传给客户端,这样客户端通过服务端传来的公钥来加密自己传输的数据,而服务端利用私钥就可以解密这个数据了。由于客户端这个用公钥加密的数据只有私钥能解密,而这个私钥只有服务端有,所以数据传输就安全了。
上面只是简单说了一下非对称加密算法是如何保证数据安全的,实际上Https的工作过程远比这要复杂。