OfflineIMAPを使用してGmailを同期できない


10

Gmailアカウントをに同期するようにOfflineIMAPを設定しようとしています~/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

最初はISPのブロックが原因であると考え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: Mandriva Linuxリリース2009.1を実行している(同じネットワーク上の)別のサーバーで同じOpenSSLコマンドを試しましたが、どうやら接続は機能しました(デバッグ出力)。OpenSSL / LibSSL 1.0.1-4ubuntu5.5でUbuntu 12.04を実行しています。これはディストリビューションに関係しているのでしょうか?


プロジェクトにはかなりの数のバージョンがあり、それらのいくつかはひどく壊れているため、offlineimapバージョンを投稿すると役立つ場合があります。彼らのホームページで情報を見つけることができる彼らのメーリングリストも試してみてください
jw013 2012

回答:


12

フィンガープリント(変更可能)を手動で指定する代わりに、offlineimapにローカルシステムの証明書の保存場所を伝え、チェーンを自動的に検証させることができます。

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

sslcacertfileがトリックです。

Ubuntu以外のユーザーがこれを目にしている場合は、場所がディストリビューションによって異なる可能性が高いことに注意してください。


4
sslcacertfileOSX上のパスはどこですか?
Meitham 2014

1
@Meithamはrudolfochrist.github.io/blog/2015/03/21/…に従っているようsslcacertfile = /usr/local/etc/openssl/cert.pem見えます。
tekknolagi 2016年

1

リモートGmailアカウントを説明する.offlineimaprcのセクションに次の行を追加する必要があります。

cert_fingerprint=f3043dd689a2e7dddfbef82703a6c65ea9b634c1

これは、GmailのimapサーバーのSSL証明書です。


0

いいえ、OpenSSLが証明書を紛失したのではなく、SSLハンドシェイクの失敗です。相手側が証明書を送信しなかったためです。

SSL非対応のサービスに接続すると、同様のエラーが発生します。

opensslに-debugオプションを追加すると何が得られますか?

回答:

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

したがって、ソケットからは何も読み取っていません(何かを送信する前に、もう一方の端または間にある何かによって閉じられたことを示唆しています)

ネットワーク上にある種のプロキシがありますか?ローカルマシンでのiptablesのリダイレクトやウイルス対策のようなものですか?

tshark -Vi any port 993opensslコマンドを実行すると何が得られますか?


ありがとう!以下は、-debugオプションを指定してOpenSSLを実行した結果です。どうやら私は同じネットワーク上の別のサーバーから接続することができます。これは、ディストリビューション固有の問題であると考えています。質問も更新しました。
2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.