2012-10-21 10 views
5

Mam trudności z nawiązaniem połączenia z XMPP (Prosody). Ale jeśli używam PSI, działa dobrze i proszę o sugestie.Uścisk dłoni protokołu XMPP SSL nie powiodło się

Oto fragment kodu z mojego pytona:

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

w trybie debugowania:

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)) 

Wszelkie sugestie na ten temat będą mile widziane. Celem jest połączenie z serwerem XMPP i dołączenie do MUC za pomocą pythona.

+1

Które XMPP pakietu Python czy używasz dokładnie? –

+1

Czy możesz zmienić poziom dziennika, aby debugować w poszukiwaniu prozodii i spróbować połączyć się i opublikować tutaj dzienniki? –

Odpowiedz

0

Jak widzę, że korzystasz z wersji Python 2.7, upewnij się, że zaktualizowałeś ją do najnowszej wersji (2.7.11), ponieważ są pewne zmiany w protokole SSL, które mogły złamać DUŻO kodu.

0

Miałem ten błąd w Pidgin (libpurple 2.10.11), gdy nie dostarczałem łańcucha certyfikatów po stronie serwera.

Rozwiązałem to przez dodanie CA-pakiet (tj pośredni certyfikat) na końcu certyfikatu na serwerze:

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

zobaczyć również https://prosody.im/doc/certificates#certificate_chains uzyskania dalszych informacji