(1) HTTPS协议=HTTP协议+SSL协议,默认端口:443
(2) HTTP协议(HyperText Transfer Protocol):超文本传输协议。默认端口:80,其中包含请求和响应两部分,其中请求包含:请求行、请求头、请求正文,响应包含:响应行、响应头、响应正文。
(3) SSL协议(Secure Socket Layer) 安全套接层:为NetScape所研发,用以保障在Internet上数据传输的安全,利用数据加密技术,封装各种高层协议(如:http协议),具体实施压缩解压缩、加密解密、计算和校验MAC等与安全有关的操作。可确保数据在网络上的传输过程中不会被截取及窃听。
(4) 加密和认证:加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容。而身份认证是用来判断某个身份的真实性,其重点在于确认用户的真实性。两者的侧重点是不同的。加密和认证是通过RSA加密算法来实现的。
(5)RSA加密算法:RSA加密算法是1977年由(美国麻省理工学院)研发的。此算法中加密和认证都是通过一对密钥(公钥和私钥)来实现的,它是目前最有影响力的秘钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为秘钥数据加密标准。
(6) 公钥和私钥:(公钥私钥加密解密方式为非对称加密方式)在现代密码体制中,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。
公钥私钥的原则:
1.一个公钥对应一个私钥。
2.密钥对中,公钥是大家都知道的,而私钥是只有自己才知道的。
3.如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。
4.如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。
加密过程如下:
比如有两个用户A和B,B有一对公钥和私钥,A想把一封信件通过双钥加密的技术发送给B,那么加密解密的过程如下:
1.B将他的公开密钥传送给A。
2.A用B的公开密钥加密她的信件,然后传送给B。
3.B用他的私人密钥解密A发送的信件。
身份认证过程如下:
身份认证和加密不同,主要用于鉴别用户的真伪。这里我们只要能够鉴别一个用户的私钥是正确的,就可以鉴别这个用户的真伪。比如有两个用户A和B,B有一对公钥和私钥,整个身份认证的过程如下:
1.B用她的私钥对信件加密(加密过程:先使用HASH算法形成信件摘要,然后使用私钥加密信件摘要生成数字签名)。
2.B将已进行数字签名的信件传送给A。
3.A用B的公钥解密信件,从而验证数字签名(验证过程:主要是先对源信件进行HASH运算,也产生一个摘要;A用新产生的摘要和原摘要对比,如果两者相同,则可以证明信息签名者的身份是B)。
总结:
公钥和私钥是成对的,它们互相解密。
公钥加密,私钥解密。
私钥数字签名,公钥验证身份。
(7) 数字证书由来:公钥是公开的,是在网络中任意传输的,太容易被窃取,不安全,所以需要找CA认证中心对公钥加密。公钥认证加密后就叫数字证书。数字证书包括:用户基本信息及公钥信息,部分还会附上认证中心签名及有效期等。证书的格式和验证方法普遍遵循X.509国际标准。目前数字证书广泛的用于电子商务平台购物、各大银行转账、网银支付等资金交易场景。
(8) CA(Certificate Authority):CA也拥有一个公钥和私钥,CA认证加密的过程其实也就是使用密钥加密的过程,是受信任的权威的第三方电子商务证书颁发机构,是负责发放和管理数字证书的权威机构。
https协议握手过程使用非对称加密方式传输(即公钥私钥加密方式),https通信过程使用对称密钥加密方式传输。(即信息的发送方和接收方用一个密钥去加密和解密数据)
(1) 浏览器向百度发出https握手请求,百度将自己的SSL数字证书(由CA颁发,里面包含了百度的公钥、CA认证中心签名及有效期等信息)进行返回。
(2) 浏览器接到百度的SSL数字证书后查看浏览器本身的"证书管理器"(谷歌浏览器输入chrome://settings/进入),进入[高级]->[管理证书],有"受信任的根证书颁发机构"列表。浏览器会根据这张列表,查看解开数字证书的公钥是否在列表之内。浏览器会自带很多CA颁发的数字证书公钥,如下图:
(3) 浏览器找到对应的CA证书颁发的公钥解密百度SSL数字证书,拿到百度的公钥,如果证书解密过程有问题则发出警告提示:常见的警告提示如下:
浏览器证书异常提示:如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。
如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。
(4) 浏览器生成随机的对称秘钥用取得的百度的公钥加密后发送给百度服务器。
(5) 百度服务器用自己的私钥解密得到对称密钥。
(6) 浏览器和百度服务器都知道了对称密钥,接下来则使用这个对称密钥加密和解密网页明文进行数据传输。值得一提的是:此对称密钥并不是永久的。如果浏览器和服务器重新进行握手,那就会生成新的密钥。keepalive可以在一定时间内重用对称密钥。
(1) 浏览器向百度发出https握手请求,被Fiddler截获,变成fidller向百度发出握手请求,百度将自己的SSL证书(由CA颁发,里面包含了百度的公钥以及认证中心签名及有效期等信息)进行返回,SSH数字证书被Fiddler截获,Fiddler用CA的公钥解开百度的证书,拿到百度公钥。
(2) Fiddler修改SSL证书相关信息(把:把百度的公钥替换成自己的公钥,把百度证书颁发机构修改成自己颁发等),以达到冒充百度的目的,然后用自己的私钥重新加密百度的SSL数字证书发送给浏览器。
(3) 由Fiddler的根证书生成器FiddlerCertMaker.exe生成Fiddler的根证书并加入浏览器"受信任的根证书颁发机构"列表,所以浏览器可以用Fiddler根证书中的公钥解密伪造的百度SSL数字证书。得到冒充的百度公钥(实际是Fiddler的公钥)。
(4) 浏览器生成随机对称秘钥,用冒充的百度公钥(实际是Fidller的公钥)加密后发出,被Fiddler截获,Fiddler用自己私钥解开带有随机对称密钥的密文,获得通讯的对称秘钥。Fiddler用百度的公钥加密对称秘钥,然后传给百度。
(5) 百度用自己私钥解开对称秘钥,这样双方就能使用对称秘钥加密传输了。
(6) Fiddler收到百度发来的网页密文,由于Fiddler也保存了对称秘钥,所以它可以解开密文,这样我们就能使用Fiddler看到加密的https的明文了,然后Fiddler再次用对称秘钥加密发送给浏览器。浏览器向百度发送密文时也被Fiddler截获,截获后使用对称秘钥解密并显示在Fiddler,然后Fiddler使用对称密钥加密后再发送给百度。如此循环往复。
前言:理解https协议加密解密原理之后,以下操作能100%的解决fiddler所有证书问题。
(1) 清理环境(首次安装Fiddler不需要清理)
1、卸载Fiddler软件以及根证书生成器Fiddler2 CertMaker。
2、清除C:\Users\Administrator\AppData\Roaming\Microsoft\Crypto\RSA 目录下所有的RSA算法文件,此算法文件和非对称公钥密钥加密相关。
3、清除电脑上的根证书,WIN+R快捷键,输入: certmgr.msc, 然后回车,查找所有fiddler证书,然后删除。
4.清除浏览器上的证书文件 ,以谷歌浏览器为例说明,在浏览器上输入: chrome://settings/,进入[高级]->[管理证书],有"受信任的根证书颁发机构"列表。此处需要仔细查找带有DO_NOT_TRUST_FiddlerRoot的字样,并删除。
(2) 安装并配置Fiddler抓取Https数据报文。
1.下载并安装fiddler,官网下载地址:Download Fiddler Web Debugging Tool for Free by Telerik
2.下载并安装Fiddler证书生成器,官网下载地址:http://www.telerik.com/docs/default-source/fiddler/addons/fiddlercertmaker.exe?sfvrsn=2
3. 打开Fiddler,点击菜单栏中的Tools—>Options,选择HTTPS页签。勾选Decrypt HTTPS CONNECTs(解密https连接),Fiddler证书生成器会自动判断本机是否安装Fiddler证书,没有则弹出如下证书安装页面。点击”Yes”按钮,在新弹出的窗口中再点击”确定”后则Fiddler证书安装完成。接下来Fiddler就可以抓取Https的数据报文。
(3) Fiddler抓取手机端的https协议数据报文。
1、打开Fiddler,点击菜单栏中的Tools—>Options,选择Connections页签。勾选Allow remote computers connnect(允许外部电脑连接)。
2、保持android手机和电脑在同一网段。如连接同一无线。
3、打开android手机的“设置”->“WLAN”,找到你要连接的无线网络并点击,弹出网络设置对话框,在“代理”处选择“手动”,在“主机名”输入框后面输入127.0.0.1,在“端口”输入框后面输入8888,然后点击“保存”按钮。
4、启动android设备中的浏览器访问百度首页或打开被测App,在fiddler中可以看到抓取到的数据报文了。