2012-06-13 29 views
1

Ubuntu 12.04有一個關於openssl的open bug。如果您嘗試連接到不支持TLS 1.2的主機(例如Evernote),則會出現「違反協議而發生EOF」。 請參閱https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371Google App Engine SDK urlfetch for Ubuntu中的openssl bug的解決方法12.04

在對該錯誤的評論中,有一個針對httplib.py的解決方法,其中強制使用TLS 1.1。不幸的是,這不適用於GAE SDK,因爲它使用基於urlfetch的自定義httplib。

如何強制urlfetch使用TLS 1.1或以其他方式解決此錯誤?當我上傳我的應用程序到GAE時,它工作正常,所以我只需要本地修復程序爲我的SDK。我已經嘗試用Python 2.7中的補丁庫httplib.py替換自定義的httplib.py,但這只是導致更多的問題,因爲該模塊需要ssl和套接字,而這又需要另一個os等。

編輯:回溯的最後部分:

File "evernote-sdk/lib/thrift/transport/THttpClient.py", line 122, in flush 
    self.code, self.message, self.headers = self.__http.getreply() 
    File "google_appengine/google/appengine/dist27/httplib.py", line 592, in getreply 
    response = self._conn.getresponse() 
    File "google_appengine/google/appengine/dist27/httplib.py", line 502, in getresponse 
    raise HTTPException(str(e)) 
HTTPException: ApplicationError: 6 [Errno 8] _ssl.c:504: EOF occurred in violation of protocol 

這是Ubuntu 12.04,Evernote的服務器/ SDK和Google App Engine SDK的組合問題。

+0

您可以發佈您在使用默認App Engine時獲得的回溯模塊?好像你有深入挖掘這個工作,但可能有辦法。 – schuppe

+0

@schuppe好的,我添加了一個回溯。感謝您的關注。 – Gurgeh

回答

2

回溯顯示了錯誤源於這裏: http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/dist27/httplib.py#490 該代碼塊使用被分配給在同一文件的363線urlfetch.fetch self._fetch。

既然我們現在使用的是urlfetch,而且問題只在dev_appserver上,那麼我們來看看urlfetch_stub.py。存根模塊使用fancy_urllib庫發出請求。 我們也知道,Ubuntu的啓動板錯誤提示做

< self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file) 
--- 
> self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=ssl.PROTOCOL_TLSv1) 

這提示我們,在我們要修補的電話。在fancy_urllib中查找「ssl.wrap_socket」會給我們1次點擊: init.py#159「> http://code.google.com/p/googleappengine/source/browse/trunk/python/lib/fancy_urllib/fancy_urllib/ 初始化的.py#159

你可以嘗試修補這個方法?我無法覈實,因爲我不知道如何重現該問題。

FWIW,搜索「ssl.wrap_socket」過所有SDK代碼也都指向了httplib2第三方庫中的幾行代碼,但現在我認爲這不是需要修補的內容。

+0

好的,我今天晚些時候再試! – Gurgeh

+0

Hooray!有用。 – Gurgeh

相關問題