先说明,我对ssl也不是完全理解,只知道它既用了对称加密,也用了非对称加密。。哈。。。
以我的理解,https是用ssl证书进行内容加密,然后服务端通过对应的证书进行解密(这里用的非对称加密?)。
因此,Fiddler要拦截https,需要给监控设备安装ssl证书。但是这个ssl证书,在接收方那边,是不承认的,既然如此。。。。它又是如何能对返回的数据进行解密的呢?
==============================================================
补充,看了一下几位大佬的回答,我补充一下我的疑惑:
1。网站的服务器端,例如nginx,会配置一个ssl证书。这个证书和Fiddler的那个证书,有什么关联吗?既然人家服务器是以自己的这个证书为准的,那Fiddler这个证书,不是不承认吗?
具体怎么解密的其实我也不知道
但是我觉得这个问题里,可能怎么实现解密不是最重要的。
看上去问题关键的地方在于 “信任证书” 。
信任证书有一个前提是:操作系统会默认信任一些可信的CA机构,windows/linux/android基本上都会有,具体不同系统设置的位置可能不一样,但是都有。
然后就是,证书都是从哪里来,两个渠道,1是找CA机构签发证书,2是自签证书。
通常,我们这边从CA机构签发的证书,它的 CA证书 已经在系统默认信任的证书列表里面了,所以如果服务端使用的是从CA机构那里签发的证书,那么客户端在和服务端建立连接通讯的时候,就能拿到服务端发送的证书,检查证书的信息,然后和本地信任的CA证书列表做对比,就能知道服务端发送的这个证书是不是受信任的证书。
如果这个时候,服务端使用了自己签发的证书,自然就过不了这个检查,因为自己签发的证书的CA,不在系统默认的CA信任列表里面。
然后回到问题,为什么Fiddler抓取HTTPS,需要安装证书,说一下这里的安装证书其实就是让系统信任Fiddler创建的CA证书。这里如果信任了Fiddler创建的CA证书,并且Fiddler拦截了HTTPS请求,再转发请求给客户端设备(这里Fiddler将证书替换成了Fiddler签发的证书),那么客户端在进行验证服务端发送过来证书是否有效的时候(因为已经信任了Fiddler的CA证书),就能验证通过了。
服务端的证书,正常情况下,基本上都不会用自己签的,都是CA机构签的。
Fiddler在这个抓包的流程里面,是作为一个中间人的角色。一方面,Fiddler使用自己的CA签发证书,和作为一个服务端,处理客户端的请求,另一方面,按照正常的流程发送和解密从服务端发送的数据。是两个部份,分别对应一份证书。
给“监控”设备安装的是“可信证书颁发机构”的CA证书,不是普通的证书。
证书的颁发过程是:
证书机构对csr签名颁发证书(csr内的公钥copy到证书内)
证书的验证(可信)过程是:
访问HTTPS时
在自己的内置CA列表中找到这个CA证书,拿出来公钥
用CA证书公钥验证这个网站的证书是否合法
而Fiddler就是在终端设备的内置的CA证书列表中,插入自己的CA证书。这样,由Fiddler自己颁发的证书,在终端设备看来就是合法的证书。
接收方是谁?
只考虑客户端和服务端。ssl 通常意义上是客户端验证服务端的。
正常情况下,客户端只有可信的证书(有层级),这样当你想中间人攻击的时候,你无法模拟出服务端的响应。
Fiddler 的话,需要你手动给客户端导入一份证书,这个证书是 fiddle 自己颁发的,所以当你发出请求的时候,服务端其实就是 fiddle,因为他可以模拟出服务端的响应了
本文向大家介绍解决拦截器对ajax请求的拦截实例详解,包括了解决拦截器对ajax请求的拦截实例详解的使用技巧和注意事项,需要的朋友参考一下 解决拦截器对ajax请求的的拦截 拦截器配置: 1、判断 String XRequested =request.getHeader("X-Requested-With") 的值,目的是判断是否是ajax请求。 2、response.getWriter().wr
本文向大家介绍vue axios请求拦截实例代码,包括了vue axios请求拦截实例代码的使用技巧和注意事项,需要的朋友参考一下 axios 简介 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征: 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支持 Promise API 拦截请求和响应 转换请
一、拦截请求 mitmproxy的强大功能是拦截请求。拦截的请求将暂停,以便用户可以在将请求发送到服务器之前修改(或丢弃)该请求。mitmproxy的set intercept命令配置拦截。i默认情况下,该命令绑定到快捷方式。 通常不希望拦截所有请求,因为它会不断中断您的浏览。因此,mitmproxy希望将流过滤器表达式作为set intercept选择性拦截请求的第一个参数。在下面的教程中,我们
配置拦截器 declarations: [ AppComponent ], HttpClientModule ], providers: [ [ { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true } ] bootstrap:
在 imi 中更加推荐使用 AOP 来拦截请求。 不要忘记把 Aspect 类加入 beanScan! Demo <?php namespace ImiApp\ApiServer\Aop; use Imi\RequestContext; use Imi\Aop\Annotation\Around; use Imi\Aop\Annotation\Aspect; use Imi\Aop\Annota
问题内容: 我知道如何拦截所有请求,但是我只想拦截来自我资源的请求。 有谁知道如何做到这一点? 问题答案: 如果只想拦截来自特定资源的请求,则可以使用可选的action 属性。Angular的文档请参见此处(用法>操作) 的JavaScript Plunker:http ://plnkr.co/edit/xjJH1rdJyB6vvpDACJOT?p=preview