【发布时间】:2015-03-03 10:20:16
【问题描述】:
我尝试编辑可用于嗅探 SSL 流量的 mallory 代理。但是,使用连接到服务器的服务器存在问题,例如CloudFlare 因为一个人无法获得真正的证书,而是来自前面的 CloudFlare 服务器。
因此,我想使用 SSLContext.wrap_socket() 中的 server_hostname 选项。但为此,我需要从 Python 套接字对象中获取目标服务器的名称。但是,我知道唯一可以检索它的函数是 getpeername() ,但这仅返回目标的 ip。有人也知道从套接字获取服务器名称的方法吗?
【问题讨论】:
-
这是用于 HTTP 的吗?在这种情况下,您 -- 不幸的是 -- 需要从 HTTP 标头中提取
Host:。 python ssl 的server_name参数用于 SNI(服务器名称指示),正是因为无法从连接中确定目标主机的名称... -
它用于 HTTP 和 HTTPS。这个解决方案有点不令人满意,因为我需要在建立真正的连接之前这样做才能伪造证书。
-
那么您可能需要通过
SSLContext.set_servername_callback()从传入的 SSL 套接字中获取服务器名称。但是请注意您的 python 版本的可用性:bugs.python.org/issue8109 ... -
感谢您的建议,这可能是解决方案。