Nie można użyć OfflineIMAP do synchronizacji Gmaila

10

Próbuję skonfigurować OfflineIMAP, aby zsynchronizować moje konto Gmail ~/Mail/Gmail. Używam dość podstawowe ~/.offlineimaprcz tutaj . Ale OfflineIMAP w ogóle nie łączy się z Gmailem. To jest komunikat debugowania, który otrzymuję (uruchamiając OfflineIMAP jako offlineimap -o -d imap:

OfflineIMAP 6.3.4
Copyright 2002-2011 John Goerzen & contributors.
Licensed under the GNU GPL v2+ (v2 or any later version).

Debug mode: Forcing to singlethreaded.
Now debugging for imap: IMAP protocol debugging
Now debugging for : Other offlineimap related sync messages
Account sync Gmail:
***** Processing account Gmail
Copying folder structure from IMAP to Maildir
Establishing connection to imap.gmail.com:993.
DEBUG[imap]:   06:28.69 Account sync Gmail imaplib2 version 2.24
DEBUG[imap]:   06:28.69 Account sync Gmail imaplib2 debug level 5, buffer level 3
WARNING: Error occured attempting to sync account 'Gmail':
Traceback (most recent call last):
File "/usr/lib/pymodules/python2.7/offlineimap/accounts.py", line 177, in syncrunner
    self.sync()
File "/usr/lib/pymodules/python2.7/offlineimap/accounts.py", line 235, in sync
    remoterepos.syncfoldersto(localrepos, [statusrepos])
File "/usr/lib/pymodules/python2.7/offlineimap/repository/Base.py", line 124, in syncfoldersto
    srcfolders = src.getfolders()
File "/usr/lib/pymodules/python2.7/offlineimap/repository/IMAP.py", line 276, in getfolders
    imapobj = self.imapserver.acquireconnection()
File "/usr/lib/pymodules/python2.7/offlineimap/imapserver.py", line 323, in acquireconnection
    elif isinstance(e, socket.error) and e.args[0] == errno.ECONNREFUSED:
NameError: global name 'errno' is not defined

***** Finished processing account Gmail

Na początku myślałem, że może to być spowodowane blokowaniem mojego ISP imap.gmail.com/imap.googlemail.com, ale mogę się z nim połączyć, używając telnet imap.googlemail.com 993:

telnet imap.googlemail.com 993
Trying 173.194.79.16...
Connected to googlemail-imap.l.google.com.
Escape character is '^]'.

Jakieś pomysły?

EDYCJA 1: Z tej odpowiedzi w SuperUser próbowałem połączyć się imap.googlemail.comza pomocą SSL przy użyciu openssl s_client -connect imap.googlemail.com:993. To daje mi:

CONNECTED(00000003)
3078125768:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 226 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

Wygląda to na problem z brakującym certyfikatem w OpenSSL. Czy to samo może się stać z OfflineIMAP?

EDYCJA 2: Próbowałem tych samych poleceń OpenSSL na innym serwerze (w tej samej sieci) z systemem Mandriva Linux wydanie 2009.1 i najwyraźniej połączenie działało ( wyjście debugowania ). Używam Ubuntu 12.04 z OpenSSL / LibSSL 1.0.1-4ubuntu5.5. Czy to może być związane z dystrybucją?

tirmm
źródło
Może to pomóc opublikować wersję offlineimap, ponieważ ten projekt ma sporo wersji na wolności, a niektóre z nich są poważnie uszkodzone. Wypróbuj również ich listę mailingową, której informacje można znaleźć na ich stronie głównej .
jw013,

Odpowiedzi:

12

Zamiast ręcznie określać odcisk palca (który można zmienić), możesz zamiast tego powiedzieć offlineimap, gdzie przechowywane są certyfikaty systemu lokalnego, a następnie automatycznie zweryfikować łańcuch.

[Repository somerepos-remote]
type = Gmail
sslcacertfile = /etc/ssl/certs/ca-certificates.crt

Plik sslcacert jest tym, co działa.

Jeśli widzą to użytkownicy spoza Ubuntu, pamiętaj, że lokalizacja najprawdopodobniej różni się w twojej dystrybucji.

Peter Hoeg
źródło
4
jakiś pomysł, gdzie sslcacertfileścieżka w OSX?
Meitham,
1
@Meitham wygląda sslcacertfile = /usr/local/etc/openssl/cert.pemzgodnie z rudolfochrist.github.io/blog/2015/03/21/… .
tekknolagi,
1

Powinieneś dodać następujący wiersz do sekcji w .offlineimaprc opisującej twoje zdalne konto Gmail:

cert_fingerprint=f3043dd689a2e7dddfbef82703a6c65ea9b634c1

To jest certyfikat SSL serwera imap Gmaila.

Dima Pasechnik
źródło
0

Nie, to nie OpenSSL nie ma certyfikatu, to błąd uzgadniania SSL, ponieważ drugi koniec nie wysłał swojego certyfikatu.

Podobny błąd wystąpi podczas łączenia się z usługą nieobsługującą protokołu SSL.

Co otrzymujesz po dodaniu opcji -debug do openssl?

odpowiedź:

read from 0x9cd8b98 [0x9cde140] (7 bytes => 0 (0x0))

Więc nic nie czytał z gniazda (sugerując, że został zamknięty przez drugi koniec lub coś pomiędzy przed wysłaniem czegokolwiek)

Czy w twojej sieci jest jakiś serwer proxy? Jakieś przekierowanie iptables lub antywirus na komputerze lokalnym?

Co tshark -Vi any port 993daje ci próba uruchomienia komendy openssl?

Stéphane Chazelas
źródło
Dzięki! Oto wynik działania OpenSSL z -debugopcją. Najwyraźniej jestem w stanie połączyć się z innego serwera w tej samej sieci. Myślę teraz, że może to być specyficzne dla dystrybucji. Zaktualizowałem również moje pytanie.
tirmm