2017-05-23 29 views
0

requestsが特定のホストに接続できない理由を追跡する問題があります。要求がTLSサーバーへの接続に失敗しました

requests.get('https://banking4.anz.com') 

は私が手::ワイヤ上

SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",) 

、私はしかし、私が要求を使用している場合

curl https://banking4.anz.com 

:ちょうどカール経由で罰金、またはブラウザ

次作品クライアントのhelloだけを見て、サーバが直ちに切断するので、sslや暗号の非互換性のようには見えません。 (私はそれらのSSL層のエラーが予想される)この場合、他に何が問題になる可能性がありますか?

私はPython 3.6.1でリクエスト2.14.2(セキュリティー・エクストラ付)を利用しています。

+0

私はそのバージョンの 'requests'サポートSNIをそのままチェックします。 – Vor

答えて

2

このサーバーは複数の方法で破損しています。

1つはonly understands DES-CBC3-SHAで、これは安全ではないと考えられ、default cipher set used by requestsには含まれません。さらに、ClientHelloの限られた数の提供された暗号だけをチェックするように見えるので、DES-CBC3-SHAがこの暗号の前にあまりにも多くのオファーがある場合、クライアントによって提供されることはありません。

import requests 
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'DES-CBC3-SHA' 
requests.get('https://banking4.anz.com') 

しかし、これは安全ではない値へのリクエストのデフォルトの暗号リストを設定していることに注意してください:

この壊れたサーバの迅速な回避策

は、サーバーがサポートする唯一の暗号を提供することです。したがって、アプリケーション内の他のサイトに接続する場合は、このメソッドを使用しないでください。代わりに、壊れたサイトに特定の暗号設定を使用して独自のHTTPAdapterを使用する this more complex solutionを見てください。

関連する問題