Impossible d'utiliser OfflineIMAP pour synchroniser Gmail

10

J'essaie de configurer OfflineIMAP pour synchroniser mon compte Gmail avec ~/Mail/Gmail. J'utilise un assez basique ~/.offlineimaprcd' ici . Mais OfflineIMAP ne se connecte pas du tout à Gmail. Voici le message de débogage que j'obtiens (en exécutant OfflineIMAP en tant que 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

Au début, je pensais que cela pouvait être dû à mon blocage de FAI imap.gmail.com/imap.googlemail.com, mais je suis capable de me connecter à l'aide de 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 '^]'.

Des idées?

EDIT 1: À partir de cette réponse sur SuperUser , j'ai essayé de me connecter imap.googlemail.comvia SSL en utilisant openssl s_client -connect imap.googlemail.com:993. Cela me donne:

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

Cela ressemble à un problème de certificat manquant dans OpenSSL. La même chose pourrait-elle arriver à OfflineIMAP?

EDIT 2: J'ai essayé les mêmes commandes OpenSSL sur un autre serveur (sur le même réseau) exécutant Mandriva Linux version 2009.1 et apparemment la connexion a fonctionné ( sortie de débogage ). J'utilise Ubuntu 12.04 avec OpenSSL / LibSSL 1.0.1-4ubuntu5.5. Serait-ce lié à la distribution?

tirmm
la source
Il peut être utile de publier votre version de carte hors ligne, car ce projet a plusieurs versions à l'état sauvage et certaines d'entre elles sont gravement endommagées. Essayez également leur liste de diffusion, dont vous trouverez les informations sur leur page d'accueil .
jw013

Réponses:

12

Au lieu de spécifier manuellement l'empreinte digitale (qui peut changer), vous pouvez plutôt indiquer à offlineimap où vos certificats système locaux sont stockés, puis le faire vérifier automatiquement la chaîne.

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

Le sslcacertfile est ce qui fait l'affaire.

Si les utilisateurs non-Ubuntu voient cela, gardez à l'esprit que l'emplacement est probablement différent sur votre distribution.

Peter Hoeg
la source
4
une idée où le sslcacertfilechemin sur OSX?
Meitham
1
@Meitham ressemble sslcacertfile = /usr/local/etc/openssl/cert.pemà rudolfochrist.github.io/blog/2015/03/21/… .
tekknolagi
1

Vous devez ajouter la ligne suivante à la section dans .offlineimaprc décrivant votre compte Gmail distant:

cert_fingerprint=f3043dd689a2e7dddfbef82703a6c65ea9b634c1

Il s'agit du certificat SSL du serveur imap de Gmail.

Dima Pasechnik
la source
0

Non, ce n'est pas OpenSSL qui manque un certificat, c'est un échec de négociation SSL car l'autre extrémité n'a pas envoyé son certificat.

Vous obtiendriez une erreur similaire lorsque vous vous connectez à un service non compatible SSL.

Qu'obtenez-vous lorsque vous ajoutez l'option -debug à openssl?

réponse:

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

Il n'a donc rien lu de la prise (suggérant qu'il a été fermé par l'autre extrémité ou quelque chose entre les deux avant d'envoyer quoi que ce soit)

Existe-t-il une sorte de proxy sur votre réseau? Une sorte de redirection iptables ou d'antivirus sur la machine locale?

Que tshark -Vi any port 993vous donne-t-il lorsque vous essayez la commande openssl?

Stéphane Chazelas
la source
Merci! Voici le résultat de l'exécution d'OpenSSL avec l' -debugoption. Apparemment, je peux me connecter à partir d'un autre serveur sur le même réseau. Je pense maintenant que cela pourrait être spécifique à la distribution. J'ai également mis à jour ma question.
tirmm