No se puede usar OfflineIMAP para sincronizar Gmail

10

Estoy tratando de configurar OfflineIMAP para sincronizar mi cuenta de Gmail ~/Mail/Gmail. Estoy usando un bastante básico ~/.offlineimaprcde aquí . Pero OfflineIMAP no se conecta a Gmail en absoluto. Este es el mensaje de depuración que recibo (ejecutando OfflineIMAP como 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

Al principio pensé que esto podría deberse al bloqueo de mi ISP imap.gmail.com/imap.googlemail.com, pero puedo conectarme a él 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 '^]'.

¿Algunas ideas?

EDITAR 1: a partir de esta respuesta en SuperUser , intenté conectarme a imap.googlemail.comtravés de SSL usando openssl s_client -connect imap.googlemail.com:993. Esto me da:

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

Esto parece un problema de certificado faltante en OpenSSL. ¿Podría estar pasando lo mismo con OfflineIMAP también?

EDIT 2: probé los mismos comandos de OpenSSL en otro servidor (en la misma red) que ejecuta Mandriva Linux versión 2009.1 y aparentemente la conexión funcionó ( salida de depuración ). Estoy ejecutando Ubuntu 12.04 con OpenSSL / LibSSL 1.0.1-4ubuntu5.5. ¿Podría esto estar relacionado con la distribución?

tirmm
fuente
Puede ser útil publicar su versión de offlineimap, ya que ese proyecto tiene bastantes versiones en estado salvaje y algunas de ellas están muy dañadas. Pruebe también su lista de correo, cuya información puede encontrar en su página de inicio .
jw013

Respuestas:

12

En lugar de especificar manualmente la huella digital (que puede cambiar), puede decirle a offlineimap dónde se almacenan los certificados de su sistema local y luego hacer que verifique automáticamente la cadena.

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

El sslcacertfile es lo que hace el truco.

Si los usuarios que no son Ubuntu están viendo esto, tenga en cuenta que la ubicación es muy diferente en su distribución.

Peter Hoeg
fuente
44
alguna idea de dónde está el sslcacertfilecamino en OSX?
Meitham
1
@Meitham se parece sslcacertfile = /usr/local/etc/openssl/cert.pema rudolfochrist.github.io/blog/2015/03/21/… .
tekknolagi
1

Debe agregar la siguiente línea a la sección en .offlineimaprc que describe su cuenta remota de Gmail:

cert_fingerprint=f3043dd689a2e7dddfbef82703a6c65ea9b634c1

Este es el certificado SSL del servidor imap de Gmail.

Dima Pasechnik
fuente
0

No, a OpenSSL no le falta un certificado, es un error de protocolo de enlace SSL porque el otro extremo no envió su certificado.

Obtendrá un error similar cuando se conecte a algún servicio no SSL habilitado.

¿Qué obtienes cuando agregas la opción -debug a openssl?

responder:

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

Por lo tanto, no lee nada del socket (lo que sugiere que estaba cerrado por el otro extremo o algo intermedio antes de enviar cualquier cosa)

¿Hay algún tipo de proxy en su red? ¿Algún tipo de redirección de iptables o antivirus en la máquina local?

¿Qué tshark -Vi any port 993te da cuando pruebas el comando openssl?

Stéphane Chazelas
fuente
¡Gracias! Aquí está el resultado de ejecutar OpenSSL con la -debugopción. Aparentemente puedo conectarme desde otro servidor en la misma red. Ahora estoy pensando que esto podría ser específico de la distribución. También actualicé mi pregunta.
tirmm