Tidak dapat menggunakan OfflineIMAP untuk menyinkronkan Gmail

10

Saya mencoba menyiapkan OfflineIMAP untuk menyinkronkan akun Gmail saya ~/Mail/Gmail. Saya menggunakan dasar yang cukup ~/.offlineimaprcdari sini . Tetapi OfflineIMAP tidak terhubung ke Gmail sama sekali. Ini adalah pesan debug yang saya dapatkan (dengan menjalankan OfflineIMAP sebagai 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

Pada awalnya saya pikir ini mungkin disebabkan oleh pemblokiran ISP saya imap.gmail.com/imap.googlemail.com, tetapi saya dapat terhubung dengannya menggunakan 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 '^]'.

Ada ide?

EDIT 1: Dari jawaban ini pada SuperUser , saya mencoba menghubungkan ke imap.googlemail.commenggunakan SSL openssl s_client -connect imap.googlemail.com:993. Ini memberi saya:

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

Ini terlihat seperti masalah sertifikat yang hilang di OpenSSL. Mungkinkah hal yang sama terjadi pada OfflineIMAP juga?

EDIT 2: Saya mencoba perintah OpenSSL yang sama pada server lain (pada jaringan yang sama) yang menjalankan Mandriva Linux rilis 2009.1 dan ternyata koneksi berfungsi ( debug output ). Saya menjalankan Ubuntu 12.04 dengan OpenSSL / LibSSL 1.0.1-4ubuntu5.5. Mungkinkah ini terkait dengan distro?

tirmm
sumber
Mungkin membantu untuk memposting versi offlineimap Anda, karena proyek itu memiliki beberapa versi di alam bebas dan beberapa di antaranya rusak parah. Coba juga milis mereka, yang informasinya dapat Anda temukan di beranda mereka .
jw013

Jawaban:

12

Alih-alih menentukan secara manual sidik jari (yang dapat berubah), Anda dapat memberitahu offlineimap tempat sertifikat sistem lokal Anda disimpan dan kemudian secara otomatis memverifikasi rantai.

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

File sslcacertfile adalah triknya.

Jika pengguna non-Ubuntu melihat ini, perlu diingat bahwa lokasi kemungkinan besar berbeda di distro Anda.

Peter Hoeg
sumber
4
tahu di mana sslcacertfilejalan di OSX?
Meitham
1
@ Meitham terlihat seperti sslcacertfile = /usr/local/etc/openssl/cert.pemmenurut rudolfochrist.github.io/blog/2015/03/21/… .
tekknolagi
1

Anda harus menambahkan baris berikut ke bagian di .offlineimaprc yang menjelaskan akun Gmail jarak jauh Anda:

cert_fingerprint=f3043dd689a2e7dddfbef82703a6c65ea9b634c1

Ini adalah sertifikat SSL server imap Gmail.

Dima Pasechnik
sumber
0

Tidak, ini bukan OpenSSL yang kehilangan sertifikat. Ini adalah kegagalan handshake SSL karena ujung lainnya tidak mengirim sertifikatnya.

Anda akan mendapatkan kesalahan serupa ketika Anda terhubung ke beberapa layanan yang tidak mendukung SSL.

Apa yang Anda dapatkan ketika Anda menambahkan opsi -debug ke openssl?

menjawab:

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

Jadi itu tidak membaca apa pun dari soket (menunjukkan itu ditutup oleh ujung lain atau sesuatu di antaranya sebelum mengirim apa pun)

Apakah ada semacam proxy di jaringan Anda? Semacam pengalihan iptables atau antivirus di mesin lokal?

Apa yang tshark -Vi any port 993memberi Anda ketika Anda mencoba perintah openssl?

Stéphane Chazelas
sumber
Terima kasih! Inilah hasil menjalankan OpenSSL dengan -debugopsi. Rupanya saya dapat terhubung dari server lain di jaringan yang sama. Saya sekarang berpikir bahwa ini bisa menjadi distro yang spesifik. Saya juga memperbarui pertanyaan saya.
tirmm