【问题标题】:XMPP Proxy TLS EncryptionXMPP 代理 TLS 加密
【发布时间】:2011-03-03 22:38:35
【问题描述】:

我正在尝试开发一个 XMPP“代理”,它将处于标准 Jabber 通信的中间。

架构将是这样的:

Pidgin ---> Proxy <--- eJabberD
              |
              v
           Console

这个代理的目的是记录所有通过网络传输的节。恕我直言,这在您开发基于 XMPP 的解决方案时非常方便。

我正在使用 EventMachine 和 Ruby 执行此操作,主要问题是要知道如何在 TLS/SASL 握手后解密流量。

在 starttls 之前,一切正常,服务器和客户端可以在它们之间进行通信,但是当 tls 握手开始时,虽然它可以工作,但由于所有流量都是加密的,因此无法转储清晰的内容。

我不是 TLS/SASL 方面的专家,所以我不知道哪种方法最好。我认为实现这一点的一种方法应该是在握手中获取证书并在内容通过代理时使用它来解密内容。

谢谢!

【问题讨论】:

    标签: proxy xmpp ssl


    【解决方案1】:

    如果你能照你说的做(抓住网络上的证书并用它来解密),那么 TLS 将毫无价值。这是 TLS 用来防止的主要攻击之一。

    如果服务器允许,就不要发送 starttls。这不是规范要求的。如果您的服务器需要 starttls,那么您可以将其配置为使用空密码,这将使流量保持未加密状态。当然,并非所有服务器都支持。

    您可以在 starttls 中充当中间人。使用您自己的隧道响应客户端,并向服务器发送单独的 starttls 协商。这应该会在客户端上生成证书警告,但由于您控制客户端,因此您可以告诉它接受证书。

    如果您控制服务器,则可以使用其中的私钥来解密流量。我不知道有任何现成的代码可以轻松做到这一点,但它是可写的。

    【讨论】:

    • 感谢您的回答。由于代理控制了所有流量,我尝试从服务器响应中删除 starttls 标记,但随后 MD5(甚至 PLAIN)身份验证不起作用。服务器不接受挑战。顺便说一句,我会尝试对此解决方案(不使用加密)进行更多调查,因为它似乎更实惠。
    猜你喜欢
    • 2021-02-28
    • 2012-06-11
    • 1970-01-01
    • 2011-09-12
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多