【问题标题】:Get the server name from socket从套接字获取服务器名称
【发布时间】: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 ...
  • 感谢您的建议,这可能是解决方案。

标签: python sockets ssl


【解决方案1】:

在 cmets 中建议的 dhke 解决方案,调用 set_servername_callback(),确实是我搜索的解决方案,可以看到 here。但是,在 mallory 中使用它是行不通的,但这是另一个话题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 2020-11-03
    • 2011-11-04
    • 2017-09-13
    • 2016-05-06
    相关资源
    最近更新 更多