Não foi possível usar o OfflineIMAP para sincronizar o Gmail

10

Estou tentando configurar o OfflineIMAP para sincronizar minha conta do Gmail ~/Mail/Gmail. Eu estou usando um básico muito ~/.offlineimaprcde aqui . Mas o OfflineIMAP não se conecta ao Gmail. Esta é a mensagem de depuração que estou recebendo (executando 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

No começo, pensei que isso poderia ser devido ao bloqueio do meu ISP imap.gmail.com/imap.googlemail.com, mas consigo conectar-me 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 '^]'.

Alguma ideia?

EDIT 1: A partir desta resposta no SuperUser , tentei conectar-me imap.googlemail.comvia SSL usando openssl s_client -connect imap.googlemail.com:993. Isso me 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
---

Parece um problema de certificado ausente no OpenSSL. O mesmo pode estar acontecendo com o OfflineIMAP?

EDIÇÃO 2: Tentei os mesmos comandos do OpenSSL em outro servidor (na mesma rede) executando o Mandriva Linux versão 2009.1 e, aparentemente, a conexão funcionou ( saída de depuração ). Estou executando o Ubuntu 12.04 com OpenSSL / LibSSL 1.0.1-4ubuntu5.5. Isso pode estar relacionado à distribuição?

tirmm
fonte
Pode ajudar a publicar sua versão offlineimap, pois esse projeto possui algumas versões em estado selvagem e algumas delas estão muito danificadas. Tente também a lista de discussão, cujas informações você encontra na página inicial .
Jw013

Respostas:

12

Em vez de especificar manualmente a impressão digital (que pode ser alterada), você pode informar offlineimap onde estão armazenados os certificados do sistema local e depois verificar automaticamente a cadeia.

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

O sslcacertfile é o que faz o truque.

Se usuários que não são do Ubuntu estiverem vendo isso, lembre-se de que o local provavelmente é diferente na sua distribuição.

Peter Hoeg
fonte
4
alguma idéia de onde o sslcacertfilecaminho no OSX?
Meitham 7/08/14
1
O @Meitham parece de sslcacertfile = /usr/local/etc/openssl/cert.pemacordo com rudolfochrist.github.io/blog/2015/03/21/… .
tekknolagi
1

Você deve adicionar a seguinte linha à seção .offlineimaprc que descreve sua conta remota do Gmail:

cert_fingerprint=f3043dd689a2e7dddfbef82703a6c65ea9b634c1

Este é o certificado SSL do servidor imap do Gmail.

Dima Pasechnik
fonte
0

Não, o OpenSSL não possui um certificado, é uma falha de handshake SSL porque a outra extremidade não enviou seu certificado.

Você receberá um erro semelhante ao se conectar a algum serviço não habilitado para SSL.

O que você ganha quando adiciona a opção -debug ao openssl?

responda:

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

Portanto, ele não leu nada do soquete (sugerindo que estava fechado pelo outro lado ou algo mais antes de enviar qualquer coisa)

Existe algum tipo de proxy na sua rede? Algum tipo de redirecionamento de iptables ou antivírus na máquina local?

O que tshark -Vi any port 993você oferece quando você tenta o comando openssl?

Stéphane Chazelas
fonte
Obrigado! Aqui está o resultado da execução do OpenSSL com a -debugopção Aparentemente, eu consigo conectar de outro servidor na mesma rede. Agora estou pensando que isso poderia ser específico da distribuição. Também atualizei minha pergunta.
tirmm 11/09/12