使用mitmproxy根据证书信任状态处理加密请求

使用mitmproxy根据证书信任状态处理加密请求,proxy,mitmproxy,Proxy,Mitmproxy,我在网上读了很多相关的话题,但是我仍然没有答案 是否可以实现下面描述的流程 代理接收请求 如果请求已加密且代理证书受信任,则拦截 如果请求未加密,则拦截 如果请求已加密,且代理证书不受信任,则在不拦截的情况下将其传递 对于通过代理的所有流量,此行为应为默认行为 能够获得传递加密请求(src和dst ip地址等)的所有可能信息也非常好。基本上我可以从fiddler那里得到相同的信息。不太可能。主要问题是mitmproxy无法知道客户端是否信任代理证书 在SSL/TLS协议中,客户机以客户机_H

我在网上读了很多相关的话题,但是我仍然没有答案

是否可以实现下面描述的流程

代理接收请求

  • 如果请求已加密且代理证书受信任,则拦截
  • 如果请求未加密,则拦截
  • 如果请求已加密,且代理证书不受信任,则在不拦截的情况下将其传递
对于通过代理的所有流量,此行为应为默认行为


能够获得传递加密请求(src和dst ip地址等)的所有可能信息也非常好。基本上我可以从fiddler那里得到相同的信息。

不太可能。主要问题是mitmproxy无法知道客户端是否信任代理证书

在SSL/TLS协议中,客户机以客户机_HELLO启动,作为响应,服务器(在本例中为motmproxy)发回包含生成的服务器证书的服务器_HELLO消息

客户端现在检查收到的服务器证书是否可信。如果没有,连接将终止。据我所知,SSL/TLS规范并没有定义如何做到这一点。Sems客户端返回SSL_警报消息,其他客户端则简单地断开连接,第三组继续SSL/TLS握手,但设置了某些内部值,这些值总是让握手失败

有一个mitmproxy脚本,它试图识别未成功的连接,然后如果客户端再次请求相同的域,它将绕过拦截。 当然,这需要客户端重新发送请求,但情况并非总是如此。

你好,罗伯特!非常感谢你的回答。我想我已经找到了你们在这里提到的脚本,现在我有两个问题和你们的答案和原始问题有关。1.若连接不能像我描述的那个样处理,那个么比如Fiddler如何处理类似的情况呢?当部分请求被加密时,我可以看到其中的所有请求。2.在实际脚本中使用请求拦截器的情况下,如何使用mantited脚本?如果你有一些例子,我真的很感激。Fiddler Classis(我不喜欢的最新的Fiddler)必须声明:拦截已启用或已禁用(不考虑你可以在Fiddler脚本中禁用每个请求的拦截)。如果您在Fiddler中启用了拦截功能,并且客户端不信任代理证书或执行证书固定,那么您将只看到
CONNECT
条目,仅此而已。如何将
tls_passthrough.py
与mitmproxy一起使用,请参见文件本身的注释部分。