XMPP SSL握手失败

时间:2012-10-21 17:02:28

标签: python xmpp

我很难与XMPP(Prosody)建立联系。但是,如果我使用PSI,它可以正常工作并请求您的建议。

以下是我的python的代码片段:

client = xmpp.Client(host)
client.connect(server=(host,port))
client.auth(username, passwd,resource='', sasl=1)
client.sendInitPresence()

在调试模式下:

DEBUG: dispatcher  warn  Registering protocol "error" as <class 'xmpp.protocol.Protocol'>(http://etherx.jabber.org/streams)
DEBUG: socket      sent  <?xml version='1.0'?><stream:stream xmlns="jabber:client" to="localhost" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" >
DEBUG: socket      error Socket error while receiving data
                         Traceback (most recent call last):
                            File "/usr/local/lib/python2.7/dist-packages/xmpp/transports.py", line 161, in receive
                            try: received = self._recv(BUFLEN)
                            error: [Errno 104] Connection reset by peer
DEBUG: client      stop  Disconnect detected
DEBUG: socket      error Socket operation failed
                         Traceback (most recent call last):
                            File "/usr/local/lib/python2.7/dist-packages/xmpp/transports.py", line 161, in receive
                            try: received = self._recv(BUFLEN)
                            error: [Errno 104] Connection reset by peer
DEBUG: socket      error Socket error while receiving data
DEBUG: client      stop  Disconnect detected

**Prosody logs :** 
Oct 20 23:46:39 c2s94ba718      info    Client connected
Oct 20 23:46:39 c2s94ba718      info    Client disconnected: ssl handshake failed
Oct 20 23:46:39 c2s94ba718      info    Destroying session for (unknown) ((unknown)@(unknown))
Oct 20 23:48:57 c2s96052a0      info    Client connected
Oct 20 23:48:57 c2s96052a0      info    Client disconnected: ssl handshake failed
Oct 20 23:48:57 c2s96052a0      info    Destroying session for (unknown) ((unknown)@(unknown))

对此有任何建议将不胜感激。目标是连接到XMPP服务器并通过python加入MUC。

2 个答案:

答案 0 :(得分:0)

当我看到您使用的是Python 2.7时,请确保您已更新到最新版本(2.7.11),因为最近有一些SSL更改可能会破坏大量代码。

答案 1 :(得分:0)

当我没有在服务器端提供证书链时,我在Pidgin(libpurple 2.10.11)中出现了这个错误。

我通过在服务器上的证书末尾添加CA-bundle(即中间证书)解决了这个问题:

cat /path/to/ica.crt >> /path/to/prosody.crt

另见https://prosody.im/doc/certificates#certificate_chains了解更多信息