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

我正在努力让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) 

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

有任何想法吗?

谢谢!

这看起来像是在服务器不期望的时候发送TLS握手,所以服务器没有发回握手信号。

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

一个wireshark跟踪会给我们的数据可以肯定的说。

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

几乎失去了我的想法后,我最终修改了nodet xmpp的starttls.js以使用tls.connect()并强制SSLv3,令我惊讶的是它工作。

请点击这里: https : //gist.github.com/jamescoletti/6591173

希望这对某人有用。