2014-07-10 244 views
15

我需要在emacs上安裝offlineimap和mu4e。問題是配置。當我運行offlineimap我得到:ca-certificates Mac OS X

OfflineIMAP 6.5.5 
Licensed under the GNU GPL v2+ (v2 or any later version) 
Thread 'Account sync Gmail' terminated with exception: 
Traceback (most recent call last): 
File "/usr/local/Cellar/offline-imap/6.5.6/libexec/offlineimap/threadutil.py", line 158, in run 
Thread.run(self) 
File "/anaconda/lib/python2.7/threading.py", line 763, in run 
self.__target(*self.__args, **self.__kwargs) 
File "/usr/local/Cellar/offline-imap/6.5.6/libexec/offlineimap/accounts.py", line 226, in syncrunner 
self.remoterepos = Repository(self, 'remote') 
File "/usr/local/Cellar/offline-imap/6.5.6/libexec/offlineimap/repository/__init__.py", line 78, in __new__ 
return repo(name, account) 
File "/usr/local/Cellar/offline-imap/6.5.6/libexec/offlineimap/repository/Gmail.py", line 37, in __init__ 
IMAPRepository.__init__(self, reposname, account) 
File "/usr/local/Cellar/offline-imap/6.5.6/libexec/offlineimap/repository/IMAP.py", line 34, in __init__ 
self.imapserver = imapserver.IMAPServer(self) 
File "/usr/local/Cellar/offline-imap/6.5.6/libexec/offlineimap/imapserver.py", line 83, in __init__ 
self.sslcacertfile = repos.getsslcacertfile() 
File "/usr/local/Cellar/offline-imap/6.5.6/libexec/offlineimap/repository/IMAP.py", line 211, in getsslcacertfile 
% (self.name, cacertfile)) 
SyntaxWarning: CA certfile for repository 'Remote' could not be found. No such file: '/usr/share/curl/ca-bundle.crt.original' 


Last 2 debug messages logged for Account sync Gmail prior to exception: 
thread: Register new thread 'Account sync Gmail' (account 'Gmail') 
imap: Using authentication mechanisms ['GSSAPI', 'CRAM-MD5', 'PLAIN', 'LOGIN'] 

這是我.offlineimaprc

[general] 
accounts = Gmail 
maxsyncaccounts = 1 
pythonfile = ~/.offlineimap.py 

[Account Gmail] 
localrepository = Local 
remoterepository = Remote 

[Repository Local] 
type = Maildir 
localfolders = ~/Maildir 

[Repository Remote] 
type = Gmail 
remoteuser = [email protected] 
remotepasseval = get_password_emacs("imap.gmail.com", "[email protected]", "993") 
realdelete = no 

folderfilter = lambda foldername: foldername not in ['[Gmail]/Spam', '[Gmail]/All Mail', '[Gmail]/Starred', '[Gmail]/Important'] 

holdconnectionopen = true 
keepalive = 60 
sslcacertfile = /usr/share/curl/ca-bundle.crt.original #?? 

有使用Python安裝一個與CA證書有問題。 Point沒有任何curl-ca-bundle brew包。我還有其他方式來安裝證書嗎?

回答

8

OS X上通常沒有CA證書包,因爲SSL庫通常在內部使用Apple的安全框架並從Keychain獲取證書。

您可以從鑰匙串證書創建自己的包:打開鑰匙串,導航到「系統根」鑰匙串中的「證書」類別,然後按Command + Shift + E(「導出項目」),保存所有證書。我認爲Python可以處理PEM格式,所以一定要選擇它。

或者,在OS X 10.6及更高版本上,系統Python是針對OpenSSL版本構建的,其中總是也會查看Keychain。因此,您可以創建僅包含虛擬自簽名證書的虛擬捆綁軟件,並在您的配置中使用該軟件包以使OfflineIMAP閉嘴。無論如何,它都會查看鑰匙串證書。

有關詳細信息,請參閱https://www.mercurial-scm.org/wiki/CACertificates#Mac_OS_X_10.6_and_higher

+0

是我管理指向Mercurial中的ca-cert目錄。現在好了。謝謝 –

+0

當我使用「System Roots」時,這並不適用於我,但是當我通過導出(選擇全部,按住Ctrl鍵單擊導出...)創建Certificates.pem時發揮作用Keychains =「System」和Category = 「證書」,並將其與來自/usr/local/etc/openssl/cert.pem的內容連接起來。我們有一個奇怪的環境,組織擁有自己的證書並截取並嗅探所有SSL流量用於安全目的,並且此證書位於系統證書中;所有其他人都在/usr/local/etc/openssl/cert.pem。 –

22

我有一個類似的問題(MacOS 10.10.2,openssl 1.0.2和offlineimap 6.5.5都是自制軟件),無法獲得虛擬證書解決方案。但是,我發現一個certfile使得offlineimap停止在/usr/local/etc/openssl/cert.pem(在通過自制軟件安裝openssl期間放在那裏,brew info openssl告訴我)停止抱怨。警告:我不知道這是否是一種好的或安全的方法。

+1

如果你已經通過自制程序安裝了'openssl',這個方法就行得通了。因爲它實際上是安裝在您的鑰匙串中的所有證書的導出,所以它也應該是安全的方式。 –

+0

謝謝@ rudolfo.christ - 我更新了答案。 certfile路徑中的'/ usr/local'應該告訴我它來自自制軟件... – user1248490

+0

這對我來說沒有任何其他的作用! – incandescentman

6

一個簡單的方法就是使用curl證書包。我用MacPorts的,所以這是與

sudo port install curl-ca-bundle 

獲得然後,您可以運行port contents curl-ca-bundle看到它安裝的是什麼, 然後添加以下~/.offlineimaprc一節爲您的遠程帳戶

sslcacertfile =/opt/local/share/curl/curl-ca-bundle.crt 

注這也將把這些證書的鏈接作爲/opt/local/etc/openssl/cert.pem