我使用 2 个代理来拦截我的手机和服务器之间的通信。这是我的拓扑:
phone --> proxy 1 --> proxy 2 --> server
proxy1 正在监听端口 8080,proxy 2 正在监听端口 8080,但我将其收到的所有内容重定向到端口 80 和 443,最后我的服务器正在监听端口 443。
手机的 IP 地址:192.168.10.199
proxy2 的 IP 地址:192.168.10.246
服务器的 IP 地址:192.168.10.211
我使用的所有设备都在我的局域网中。
这我的手机上安装了第一个代理(Android)它使我能够将来自我手机的所有流量路由到第二个代理(当我单独使用第二个代理时,它不会拦截所有流量,这是因为有些应用程序选择直接与服务器通信而不通过代理,即使我的手机已经 root 了)。
我使用 Wireshark 来可视化我的手机和服务器之间的通信第二个代理是 mitmproxy,我已经在手机上安装了证书,下面是我得到的结果:
192.168.10.199 192.168.10.246 POST /message HTTP/1.1
192.168.10.199 是我手机的 IP 地址,192.168.10.246 是代理 2 的 IP 地址,因此代理 2 正在接收来自我手机的信息,但是当它尝试传输到服务器时,我得到的信息如下:
192.168.10.246 192.168.10.199 HTTP/1.1 502 Bad Gateway (text/html), Alert (Level: Warning, Description: Close Notify)
这正是我在 Wireshark 上收到的消息:
<html>
<head>
<title>502 Bad Gateway</title>
</head>
<body>
<h1>502 Bad Gateway</h1>
<p>TlsProtocolException("Cannot establish TLS with 192.168.10.211:443 (sni: None): TlsException('Cannot validate certificate hostname without SNI',)",)</p>
</body>
</html>
我尝试在 Postman 上运行相同的请求POST https://192.168.10.211:443/message
,但收到的消息不一样:
无法获得任何响应 连接到https://192.168.10.211:443/消息。
发生这种情况的原因:
服务器无法发送响应:
确保后端正常工作自签名 SSL 证书被阻止:
通过在“设置”>“常规”中关闭“SSL 证书验证”来解决此问题
代理配置不正确
确保在“设置”>“代理”中正确配置了代理
请求超时:
在“设置”>“常规”中更改请求超时
我想了解到底发生了什么?我猜证书必须安装在第一个代理上(安装在我的手机上),而不是手机本身上,这就是为什么我得到上述异常的原因。我说得对吗?
答案1
这似乎是服务器端错误,而不是设备特定的错误。
您是否已确认 Web 服务器正在端口 443 上运行并且无需代理即可访问?
以下是有关实际 502 错误代码的更多信息。https://www.lifewire.com/502-bad-gateway-error-explained-2622939