Impossibile utilizzare OfflineIMAP per sincronizzare Gmail


10

Sto cercando di configurare OfflineIMAP per sincronizzare il mio account Gmail ~/Mail/Gmail. Sto usando un abbastanza semplice ~/.offlineimaprcda qui . Ma OfflineIMAP non si connette affatto a Gmail. Questo è il messaggio di debug che sto ricevendo (eseguendo OfflineIMAP come 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

All'inizio pensavo che ciò potesse essere dovuto al blocco del mio ISP imap.gmail.com/imap.googlemail.com, ma sono in grado di collegarmi usando 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 '^]'.

Qualche idea?

EDIT 1: Da questa risposta su SuperUser , ho provato a collegarmi imap.googlemail.comtramite SSL usando openssl s_client -connect imap.googlemail.com:993. Questo mi dà:

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

Sembra un problema di certificato mancante in OpenSSL. Potrebbe succedere lo stesso anche con OfflineIMAP?

EDIT 2: ho provato gli stessi comandi OpenSSL su un altro server (sulla stessa rete) con Mandriva Linux versione 2009.1 e apparentemente la connessione ha funzionato ( output di debug ). Sto eseguendo Ubuntu 12.04 con OpenSSL / LibSSL 1.0.1-4ubuntu5.5. Questo potrebbe essere correlato alla distribuzione?


Potrebbe essere utile pubblicare la tua versione offlineimap, dato che quel progetto ha parecchie versioni allo stato brado e alcune di esse sono gravemente interrotte. Prova anche la loro mailing list, le cui informazioni puoi trovare sulla loro home page .
jw013,

Risposte:


12

Invece di specificare manualmente l'impronta digitale (che può cambiare), puoi invece dire offlineimap dove sono archiviati i tuoi certificati di sistema locali e quindi verificare automaticamente la catena.

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

Il file sslcacert è ciò che fa il trucco.

Se gli utenti non Ubuntu lo vedono, tieni presente che la posizione è molto diversa nella tua distribuzione.


4
qualche idea di dove sia il sslcacertfilepercorso su OSX?
Meitham,

1
@Meitham sembra sslcacertfile = /usr/local/etc/openssl/cert.pemsecondo rudolfochrist.github.io/blog/2015/03/21/… .
tekknolagi,

1

Devi aggiungere la seguente riga alla sezione in .offlineimaprc che descrive il tuo account Gmail remoto:

cert_fingerprint=f3043dd689a2e7dddfbef82703a6c65ea9b634c1

Questo è il certificato SSL del server imap di Gmail.


0

No, OpenSSL non ha un certificato mancante, è un errore di handshake SSL perché l'altra estremità non ha inviato il suo certificato.

Si otterrebbe un errore simile quando ci si connette a un servizio abilitato non SSL.

Cosa ottieni quando aggiungi l'opzione -debug a openssl?

risposta:

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

Quindi non leggeva nulla dal socket (suggerendo che era chiuso dall'altra estremità o qualcosa nel mezzo prima di inviare qualcosa)

C'è una sorta di proxy sulla tua rete? Una sorta di reindirizzamento o antivirus di iptables sul computer locale?

Cosa tshark -Vi any port 993ti dà quando provi il comando openssl?


Grazie! Ecco il risultato dell'esecuzione di OpenSSL con l' -debugopzione. Apparentemente sono in grado di connettermi da un altro server sulla stessa rete. Ora sto pensando che questo potrebbe essere specifico per la distribuzione. Ho aggiornato anche la mia domanda.
tirmm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.