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.