无法使用node-xmpp连接到xmpp服务器

时间:2012-03-31 00:55:55

标签: node.js openssl xmpp openfire

我正在努力让node-xmpp与我们内部的jabber服务器一起工作。我能够使用talk.google.com正常工作,我可以使用adium或ichat连接到我们的内部服务器。

  • 节点v0.6.14
  • CentOS 6.2 / 2.6.32
  • node-xmpp 0.3.2
  • OpenSSL 1.0.0

连接代码

var j = new xmpp.Client({
  jid : 'user@domain',
  password : 'pass',
  host : 'chat.domain'
});

在跟踪代码之后,它似乎在尝试将连接升级到安全连接后卡住了。这发生在 starttls 函数的 starttls.js 中。

永远不会调用 pair.on('secure')事件,即使我在settimeout之后打印出对,它仍然没有被授权。在这一点上,我没有看到任何数据进出。

经过很长一段时间坐在那里(几个小),它打印出一个看起来像这样的错误

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)

如果重要,服务器正在使用自签名证书。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

这看起来就像您在服务器不期待它时发送TLS握手,因此服务器不会发回其握手。

一种可能性是您正在将旧式TLS(握手优先)与实现start-TLS的服务器进行对话。在您的实际代码中,您是否设置了legacySSL参数?您确定要与目标盒上的XMPP服务器通信吗?

wireshark跟踪将为我们提供能够确定的数据。

答案 1 :(得分:0)

我遇到了同样的问题:尝试与一个特定的Openfire XMPP服务器安装执行TLS握手时连接挂起(虽然其他工作正常)。

在几乎失去理智后,我最终修改了随node-xmpp一起使用的starttls.js以使用tls.connect()并强制使用SSLv3,令我惊讶的是它有效。

请点击此处:https://gist.github.com/jamescoletti/6591173

希望这对某人有用。