赞
踩
HTTP也有几个较为显著的缺点:
正是由于这几个显著的缺点存在,所以HTTPS应运而生。https俗称超文本传输安全协议。是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS是在HTTP的基础上加上一层安全层(SSL或TLS协议),用于数据加密、解密、身份认证,即
HTTP + 加密 + 认证 = HTTPS
HTTPS的安全性主要体现在下面3个方面:
要实现数据的保密,就需要使用加密算法对数据进行加密;加密算法大致分为三类:对称加密、非对称加密、散列算法
CA证书:CA证书CA证书内含服务端公钥与私钥,使用hash散列函数计算明文信息的信息摘要,然后采用CA证书内含的私钥对信息摘要进行加密最终生成签名。即:证书 = 公钥 + 签名 +申请者和颁发者的信息。客户端中因为在操作系统中就预置了CA的公钥,所以支持解密签名。
总结:连接建立过程使用非对称加密,后续通信过程使用对称加密;
数据的加密,有效保证了数据不被窃听(很难得到原始的数据),但传输的数据在传输过程中有可能被篡改或替换;比如:
传输的原始数据是123456,经过加密后数据是abcdef;客户端将abcdef这个数据传输给服务器,传输过程中中间人能拿到abcdef这个数据,但因为没有密钥很难解密出原始数据123456;但是,中间人还是能对得到的abcdef这个加密数据进行处理,比如将这个数据改为xxxxx;这样服务器得到的数据就是被篡改后的xxxxx;同样,服务器返回数据给客户端时也会被篡改;这样其实也是不安全的;
解决方案是进行数字签名:使用Hash算法将任意长度的字符串转化为固定长度的字符串,该过程不可逆,可用来作数据完整性校验;
数字签名的简要过程(服务器–>客户端为例,客户端–>服务器类似):
以上加密过程,最核心的就是非对称加密的公钥和私钥;如果这个密钥都是攻击者提供的,那传输的数据在攻击者那里也是相当于裸露的;如何确保密钥是不被冒充的呢?HTTPS使用了数字证书(签名),数字证书就是身份认证机构CA(Certificate Authority)加在数字身份证上的一个签名,证书的合法性可以向CA验证;证书的制作方法是公开的,任何人都可以自己制作证书,但只有权威的证书颁发机构的证书能通过CA认证;
数字证书主要包含以下信息:
几乎所有网络数据的抓包都是采用中间人的方式(MITM),包括大家常用的Fiddler、Charles等知名抓包工具,HttpCanary同样是使用中间人的方式进行抓包。
从上面这个原理图,可以看出抓包的核心问题主要是两个:
MITM Server如何伪装成真正的Server;
MITM Client如何伪装成真正的Client。
第一个问题,MITM Server要成为真正的Server,必须能够给指定域名签发公钥证书,且公钥证书能够通过系统的安全校验。比如Client发送了一条https://www.baidu.com/的网络请求,MITM Server要伪装成百度的Server,必须持有www.baidu.com域名的公钥证书并发给Client,同时还要有与公钥相匹配的私钥。
MITM Server的处理方式是从第一个SSL/TLS握手包Client Hello中提取出域名www.baidu.com,利用应用内置的CA证书创建www.baidu.com域名的公钥证书和私钥。创建的公钥证书在SSL/TLS握手的过程中发给Client,Client收到公钥证书后会由系统会对此证书进行校验,判断是否是百度公司持有的证书,但很明显这个证书是抓包工具伪造的。为了能够让系统校验公钥证书时认为证书是真实有效的,我们需要将抓包应用内置的CA证书手动安装到系统中,作为真正的证书发行商(CA),即洗白。这就是为什么,HTTPS抓包一定要先安装CA证书。
第二个问题,MITM Client伪装成Client。由于服务器并不会校验Client(绝大部分情况),所以这个问题一般不会存在。比如Server一般不会关心Client到底是Chrome浏览器还是IE浏览器,是Android App还是iOS App。当然,Server也是可以校验Client的,这个后面分析。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。