Невозможно использовать OfflineIMAP для синхронизации Gmail

10

Я пытаюсь настроить OfflineIMAP для синхронизации с моей учетной записью Gmail ~/Mail/Gmail. Я использую довольно простой ~/.offlineimaprcиз здесь . Но OfflineIMAP вообще не подключается к Gmail. Это отладочное сообщение, которое я получаю (запустив OfflineIMAP как 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

Сначала я думал, что это может быть связано с блокировкой моего провайдера imap.gmail.com/imap.googlemail.com, но я могу подключиться к нему с помощью 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 '^]'.

Есть идеи?

РЕДАКТИРОВАТЬ 1: Из этого ответа на SuperUser , я попытался подключиться imap.googlemail.comчерез SSL с помощью openssl s_client -connect imap.googlemail.com:993. Это дает мне:

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

Это похоже на проблему с отсутствующим сертификатом в OpenSSL. Может ли то же самое происходить и с OfflineIMAP?

РЕДАКТИРОВАТЬ 2: Я попробовал те же команды OpenSSL на другом сервере (в той же сети) под управлением Mandriva Linux версии 2009.1, и, очевидно, соединение работает ( вывод отладки ). Я использую Ubuntu 12.04 с OpenSSL / LibSSL 1.0.1-4ubuntu5.5. Может ли это быть связано с дистрибутивом?

tirmm
источник
Это может помочь опубликовать вашу версию оффлайн-карты, так как в этом проекте довольно много версий, и некоторые из них сильно сломаны. Попробуйте также их список рассылки, чью информацию вы можете найти на их домашней странице .
jw013

Ответы:

12

Вместо того, чтобы вручную указывать отпечаток пальца (который может измениться), вы можете вместо автономного отображения указать, где хранятся сертификаты вашей локальной системы, а затем автоматически проверять цепочку.

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

Sslcacertfile - вот что делает трюк.

Если пользователи, не являющиеся пользователями Ubuntu, видят это, имейте в виду, что местоположение скорее всего в вашем дистрибутиве другое.

Питер Хуг
источник
4
Есть идеи, где sslcacertfileпуть на OSX?
Мейтам
1
@Meitham выглядит sslcacertfile = /usr/local/etc/openssl/cert.pemсогласно rudolfochrist.github.io/blog/2015/03/21/… .
Текнолаги
1

Вы должны добавить следующую строку в раздел в .offlineimaprc, описывающий вашу удаленную учетную запись Gmail:

cert_fingerprint=f3043dd689a2e7dddfbef82703a6c65ea9b634c1

Это сертификат SSL сервера imap в Gmail.

Дима Пасечник
источник
0

Нет, это не отсутствие сертификата OpenSSL, это сбой рукопожатия SSL, потому что другой конец не отправил свой сертификат.

Вы получите похожую ошибку при подключении к какой-либо службе без поддержки SSL.

Что вы получаете, когда добавляете опцию -debug к openssl?

ответ:

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

Таким образом, он ничего не читал из сокета (предполагая, что он был закрыт другим концом или чем-то промежуточным перед отправкой чего-либо)

Есть ли какой-то прокси в вашей сети? Какое-то перенаправление iptables или антивирус на локальной машине?

Что tshark -Vi any port 993вы получите, когда попробуете команду openssl?

Стефан Шазелас
источник
Спасибо! Вот результат запуска OpenSSL с -debugопцией. Видимо, я могу подключиться с другого сервера в той же сети. Теперь я думаю, что это может быть специфичным для дистрибутива. Я также обновил свой вопрос.
Tirmm