用 Charles 抓包,知乎可以正常获取到数据,但是抓豆瓣就一直超时了,看请求也都是 unknown 。
|  |      1mht      2021-06-09 18:07:54 +08:00 SSL 证书没配置吧 | 
|  |      2newmlp      2021-06-09 18:11:21 +08:00  1 有些客户端做了证书固定,除了自己的证书谁的证书都不信任 | 
|  |      3libook      2021-06-09 18:22:31 +08:00 只要你最终是用官方的证书来发起 HTTPS 请求的,理论上服务端是无法知道你有没有做抓包的。 那么就只能是客户端不认自签证书,这个只要你破解了客户端,服务端应该是一点办法都没有。 TLS 只能解决 TLS 通信过程中的中间人问题,不能解决 TLS 通信之前的中间人问题。 | 
|  |      4bruce0      2021-06-09 18:39:05 +08:00 https 抓包就是中间人攻击, 欺骗客户端和服务器, 有很多种方式可以防范, 很多 app 内置私有证书,服务端只信任自己的私有证书 https://zhuanlan.zhihu.com/p/46433599 这里有详细介绍 | 
|  |      5ErenJaeger OP @mht 配置了,证书都安装好了,不然 https 的都解密不了 | 
|  |      6ErenJaeger OP @newmlp 淦,这种有解决的方法吗? | 
|  |      7ErenJaeger OP @bruce0 谢谢老哥,我去研究一下 | 
|  |      8ErenJaeger OP @libook 这种方式该如何实现呢,用 Charles,fidder 这些做代理,可以配置对应的证书吗? | 
|  |      9heart4lor      2021-06-09 20:02:42 +08:00  2 https://www.sunyongfei.cn/archives/213/ 我写过一篇博客介绍 hook 绕过本地 https 证书认证,可以参考下看有没有帮助,服务端是无感知的 | 
|      10ZhaoHuiLiu      2021-06-09 20:54:34 +08:00 我就纳闷。。。都手机 app 应用了,直接用 socket 通信,私有加密算法,你抓包抓什么呢? | 
|  |      11ErenJaeger OP @heart4lor 感谢老哥,我去拜读一下 | 
|  |      12duan602728596      2021-06-10 09:11:44 +08:00 我之前是通过越狱了的手机安装 ssl-kill-switch2 抓的 | 
|  |      13libook      2021-06-10 10:00:26 +08:00 @ErenJaeger #8 其他楼都提到了,抓包其实本质上就是中间人攻击,就是你在 A 、C 通信的时候中间加了个 B,就变成了 A 到 B,然后 B 到 C,B 就是这个抓包工具,A 到 B 是使用 B 的证书来通信的,B 到 C 是使用 C 的证书来通信的,大多数 A 都不会管通信时是用谁的证书,只要有证书就行,所以大多情况你可以直接在设备上装抓包软件的证书就可以直接抓包,但是你目前遇到的情况可能是 A 只认 C 的证书,你让 A 用 B 的证书被 A 拒绝了,所以抓不到数据。 要想解决问题只能让 A 接受 B 的证书,这个涉及到破解 A 的程序,修改算法让其接受 B 的证书,这个属于逆向工程的领域,技术门槛比较高。 | 
|  |      14locoz      2021-06-10 10:01:19 +08:00 via Android  1 补充一下,服务端检测方面除了  @libook #3 说的证书方面的检测以外,实际上还可以通过 ssl 指纹进行检测,因为不同软件、系统使用的 ssl 库是不一样的,能支持的加密套件、版本号啥的也都是不一样的,产生出来的特征就相对比较独特。 所以对于 app 而言,如果对方把抓包工具的特征记录了下来,或者在客户端上对 ssl 层做了一个特别的特征,而代理软件发出的 ssl 握手请求却不符合正常的特征,那就肯定有问题。 另外,如果在客户端上检测的话花样就更多了,只不过没啥意义,太容易被 hook 一下就解决掉,还不如套个别的协议来得直接。比如 @ZhaoHuiLiu #10 说的“直接用 socket 通信,私有加密算法”,在实际应用的时候可以是先基于 TCP/UDP 定一套私有协议,然后套上加密,再在这套私有协议里跑 HTTP,其实也就是科学上网工具用的方法。这方面比较典型的实际应用案例就是腾讯的维纳斯,大众点评啥的直接抓包抓不到就是因为这个。 | 
|  |      15locoz      2021-06-10 10:04:45 +08:00 via Android @locoz #14 (客户端对证书做检测这种就是典型的能被 hook 一下就解决掉的操作,看着花里胡哨实际没啥难度 | 
|      16julyclyde      2021-06-10 11:50:05 +08:00 Charles 这就不叫抓包 | 
|  |      17qwerthhusn      2021-06-10 14:10:10 +08:00 @julyclyde 为什么不叫抓包,Charles 和 Fiddler 也是抓包,只不过同时把包二次包装发给服务器或者客户端 | 
|  |      18unco020511      2021-06-10 16:36:25 +08:00 怎么就成中间人攻击了,TLS 是安全的,你被抓包是因为你主动在你自己的设备中安装了第三方的证书,第三方才可以读取你的数据,这不是协议的问题,这是你自己的问题啊 | 
|      19julyclyde      2021-06-10 17:34:29 +08:00 @qwerthhusn sniff 才能叫抓包 charles 这叫中间人攻击 | 
|  |      20ErenJaeger OP 这种方式可以解决,我目前用的是将 charles 的证书放在系统证书目录下,在模拟器里面抓的 |