2016-09-07 12 views
0

Python 2.7.12およびOpenSSL 1.0.2hのリクエスト2.11.1を使用してhttps経由でファイルを取得しようとしています。 (すべてAnacondaからMacOS 10.11.6にインストールされています) SSLLabsによれば、サーバーはTLS 1.0,1.1、および1.2をサポートしています。さらに、secure-protocolをtlsv1に明示的に設定すると、wget(OpenSSL 1.0.2hにリンクされています)でファイルを正常に取得できます(ただし、sslv2などのサポートされていないプロトコルに設定した場合は無効になります)。しかし、私は次のように明示的に、私は次の例外に遭遇https GETプロキシの後ろはwget + TLSv1で成功しますが、sslプロトコルがTLSv1に強制されていてもリクエストで失敗します

from requests_toolbelt import SSLAdapter 
import requests 
import ssl 

s = requests.Session() 
p = ssl.PROTOCOL_TLSv1 
s.mount('https://', SSLAdapter(p)) 
r = s.get("https://anaconda.org/conda-forge/matplotlib/2.0.0b3/download/osx-64/matplotlib-2.0.0b3-np111py27_5.tar.bz2") 

などのTLSv1、TLSv1_1、またはTLSv1_2、への要求が使用するセキュアなプロトコルを設定しようとした場合:

/Users/lebedov/anaconda2/lib/python2.7/site-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies) 
    495   except (_SSLError, _HTTPError) as e: 
    496    if isinstance(e, _SSLError): 
--> 497     raise SSLError(e, request=request) 
    498    elif isinstance(e, ReadTimeoutError): 
    499     raise ReadTimeout(e, request=request) 

SSLError: ("bad handshake: Error([('SSL routines', 'SSL3_GET_RECORD', 'wrong version number')],)",) 

(あまり驚くことを明示的にプロトコルをSSLv2、SSLv3、またはSSLv23に設定すると、ハンドシェイクの例外が発生します。)また、https経由で他のサイトを取得しようとしても例外はありません。私はそれがTLSv1を使用するように強制しても、要求が接続に失敗する理由は何ですか?

+0

'https:// myurl ...'はあまり役に立ちません。 SNIは違いを生みますか? SNIなし: 'openssl s_client -connect -tls1'。 SNIの場合: 'openssl s_client -connect -tls1 -servername 'です。また、[SSLv3 alert handshake failure urllib2](http://stackoverflow.com/q/30918761)も参照してください。これはPython 2.7の質問です。 – jww

+0

明示的なURIが追加されました。 – lebedov

+0

ここでtls1を設定していますか?あなたがしていることは、ssl.PROTOCOL_TLSv1に等しい変数pを作成することです。何も設定していません。あなたがしなければならないのは、 'https://lukasa.co.uk/2013/01/Choosing_SSL_Version_In_Requests/ 'であり、' s.mount(' https:// '、some_adapter)) 'なしで'すべてのコードバーr = ... –

答えて

0

この問題は、プロキシが認識できないユーザーエージェント文字列を含むHTTPヘッダーを拒否したことが原因であることが判明しました。明示的にヘッダーのユーザーエージェントをMozilla/4.0 (compatible; MSIE 5.5; Windows 98)のようにcntlmのハッキングされたバージョンを介して設定すると、問題が解決されました。

関連する問題