2011-03-03 63 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