代理无法通过 SSL 连接工作

Posted

技术标签:

【中文标题】代理无法通过 SSL 连接工作【英文标题】:Proxy not working over SSL connection 【发布时间】:2014-08-07 19:09:41 【问题描述】:

我正在尝试使用 tor、socksipy 和 ssl 来代理 ssl 连接。我的客户看起来像这样:

import socks, ssl
s = socks.socksocket()
s.setproxy(socks.PROXY_TYPE_SOCKS5,"127.0.0.1", 9050)
ssl_sock = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_TLSv1)
ssl_sock.connect(('127.0.0.1', 443))

服务器只接受连接并打印getpeername

对等点名称始终为 127.0.0.1。我给它一个无效的代理也没关系。客户端不会抱怨,无论如何它都会连接。

如何让它通过代理连接?

【问题讨论】:

如果你投反对票,至少留下一些建设性的批评。 【参考方案1】:

我设法弄明白了,所以我将答案留在这里以供将来参考。

第一个问题是我尝试连接到127.0.0.1。当请求被代理时,代理会尝试连接到127.0.0.1,所以它会尝试连接到自己,而不是我。 我必须配置我的路由器以将端口 443 上的请求转发到我的笔记本电脑,然后我将 127.0.0.1 替换为我的路由器 IP。

在那之后,我发现 socksipy 不能很好地与 ssl 配合使用。 在包装它之前,我必须在套接字上调用connect,否则我会遇到握手失败。代码变成了:

import socks, ssl
s = socks.socksocket()
s.setproxy(socks.PROXY_TYPE_SOCKS5,"127.0.0.1", 9050)
s.connect(('127.0.0.1', 443))
ssl_sock = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_TLSv1)

之后,一切正常。

【讨论】:

以上是关于代理无法通过 SSL 连接工作的主要内容,如果未能解决你的问题,请参考以下文章

没有 SslStream 的 SSL,因为我想通过 SOCKS5 代理连接

Application Center 移动客户端 - 无法通过 HTTPS 连接登录

通过 Java 到 LDAP 的 SSL 连接 [重复]

启用/禁用 mod_ssl 后 Apache 无法启动

具有SSL终止的Apache前向代理

无法从 https 客户端通过 wss 连接到 emqx mqtt 代理