我正在尝试开发一个XMPP“代理”,它将处于标准Jabber通信的中间。
架构将是这样的:
Pidgin ---> Proxy <--- eJabberD
|
v
Console
此代理的目的是记录所有通过网络的节。恕我直言,当您开发基于XMPP的解决方案时,这非常方便。
我正在使用EventMachine和Ruby执行此操作,主要问题是知道如何在TLS / SASL握手后对流量进行解密。
在starttls之前,一切都运行良好,服务器和客户端可以在它们之间进行通信,但是当tls握手开始时,虽然它可以工作,但是由于所有流量都是加密的,所以无法转储清晰的内容。
我不是TLS / SASL的专家,所以我不知道哪种方法最好。我认为实现这一目标的一种方法应该是在握手中获取证书,并在内容通过代理时使用它来解密内容。
谢谢!
答案 0 :(得分:2)
如果你能做你说的话(在线上获取证书并使用它来解密),那么TLS将毫无价值。这是TLS存在的主要攻击之一。
如果服务器允许,只是不要发送starttls。规范不要求这样做。如果服务器需要starttls,则可以将其配置为使用空密码,这将使流量保持未加密状态。当然并非所有服务器都支持这种服务器。
你可以在中间开始。使用您自己的隧道响应客户端,并向服务器发送单独的starttls协商。这应该在客户端上生成证书警告,但是由于您控制客户端,您可以告诉它接受证书。
如果您控制服务器,则可以使用其中的私钥来解密流量。我不知道有任何现成的代码可以轻松地做到这一点,但它是可写的。