2012-03-31 121 views
5

我正在努力讓node-xmpp與我們在這裏的jabber服務器一起工作。我可以很好地使用talk.google.com,並且可以使用adium或ichat連接到我們的內部服務器。無法使用node-xmpp連接到xmpp服務器

  • 節點v0.6.14
  • CentOS的6.2/2.6.32
  • 節點XMPP 0.3.2
  • OpenSSL的1.0.0

連接代碼

var j = new xmpp.Client({ 
    jid : '[email protected]', 
    password : 'pass', 
    host : 'chat.domain' 
}); 

在通過代碼追蹤之後,它似乎在嘗試升級conn後就卡住了以安全連接。這發生在starttls.jsstarttls函數中。

pair.on('secure')事件永遠不會被調用,即使在settimeout之後打印出對,它仍然不會被授權。在這一點上,我沒有看到任何數據。

經過長時間坐在那裏(幾個minites)它打印出看起來像這樣

throw arguments[1]; // Unhandled 'error' event 
     ^
Error: 139644497663968:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:s23_clnt.c:674: 

    at CleartextStream._pusher (tls.js:508:24) 
    at CleartextStream._push (tls.js:334:25) 
    at SecurePair.cycle (tls.js:734:20) 
    at EncryptedStream.write (tls.js:130:13) 
    at Socket.ondata (stream.js:38:26) 
    at Socket.emit (events.js:67:17) 
    at TCP.onread (net.js:367:14) 

服務器使用自簽名的證書,如果該事項錯誤。

任何想法?

謝謝!

+1

您正在使用哪些服務器軟件? (我要堅持我的脖子出來猜猜... Openfire?) – MattJ 2012-03-31 22:58:06

+0

是的,openfire。 – 2012-04-01 10:03:37

+0

你有沒有得到這個工作?我們在openfire和最新版本的node + node_xmpp上遇到同樣的問題。 – dustyburwell 2013-01-23 21:59:36

回答

0

這看起來像是當服務器不期待它發送TLS握手,所以服務器沒有發送它的握手。

一種可能性是您正在向實現start-TLS的服務器講舊式TLS(握手優先)。在你真實的代碼中,你是否設置了legacySSL參數?你確定你正在與目標盒上的XMPP服務器通話嗎?

A wireshark痕跡會給我們的數據能夠肯定。

0

我遇到了同樣的問題:嘗試執行與一個特定的Openfire XMPP服務器安裝(儘管其他人工作正常)的TLS握手時連接掛起。

在幾乎失去了我的想法後,我最終修改了隨node-xmpp附帶的starttls.js以使用tls.connect()並強制SSLv3,令我驚訝的是它工作。

要點在這裏:https://gist.github.com/jamescoletti/6591173

希望這是有用的人。

+0

這個要點已被刪除。是否有可能恢復? – user1074891 2017-05-13 23:44:51