2011-03-03 31 views
1

我试图开发一个XMPP“代理”,它将在标准的Jabber通信中。XMPP代理TLS加密

的架构将是这样的:

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

这个代理的目的是记录所有走在丝节。恕我直言,当您开发基于XMPP的解决方案时,这非常方便。

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

在启动之前,所有工作都很完美,服务器和客户端可以在它们之间进行通信,但是当握手开始时,虽然它可以工作,但不可能在所有通信都被加密时转储明文内容。

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

谢谢!

回答

2

如果你可以做你所说的话(拿到证书并用它来解密),那么TLS就会毫无价值。这是TLS存在的主要攻击之一。

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

你可以在中间人起动。用自己的隧道响应客户端,并向服务器发送单独的starttls协商。这应该在客户端上生成证书警告,但是由于您控制了客户端,因此无论如何都可以告诉它接受证书。

如果您控制服务器,您可以使用它的私钥来解密流量。我不知道任何现成的代码如何轻松完成,但它是可写的。

+0

感谢您的回答。由于代理控制所有流量,我尝试从服务器响应中删除starttls标记,但是然后MD5(甚至PLAIN)身份验证不起作用。挑战不被服务器所接受。顺便说一句,我会尝试调查更多关于这个解决方案(不使用加密),因为它似乎更实惠。 – HyLian 2011-03-04 07:36:48