テクノロジー · 実用ガイド
Python SSL の WRONG_VERSION_NUMBER?プロキシ方式と TLS 終端を証明する
対象とプロキシの方式、継承設定、CONNECT 経路、最初の応答先を記録してから、証明書や TLS バージョンを変更します。

WRONG_VERSION_NUMBER は、TLS を想定した境界のバイトがその接続の有効な TLS レコードではなかったことを示す場合があります。平文 HTTP のプロキシやポートに TLS を送るのが典型ですが、唯一の原因ではありません。
対象 URL、実効プロキシ、環境と OS の検出、CONNECT、最初の応答先を保存します。verify=False で経路エラーを証明書問題に見せないでください。
失敗した要求と全プロキシ源を固定する
Python、Requests、urllib3、OpenSSL の版、URL、ポート、例外全体を記録します。PreparedRequest と引数、Session、環境、OS プロキシを保存します。
信頼や TLS バージョンはまだ変更しません。機密でない対象で、クリーン環境と予定プロキシを比較します。
対象方式とプロキシ方式を別々に整理する
HTTP プロキシは CONNECT で HTTPS 対象を運べます。HTTPS プロキシではクライアントが先にプロキシへ TLS を張ります。
したがって HTTPS_PROXY=http://proxy:port は正しい場合があります。変数名ではなく、その端点が話すプロトコルで方式を決めます。
最初に TLS を受ける終端を証明する
実効設定からプロキシ先を解決し、CONNECT と最初の応答が平文 HTTP、認証要求、TLS のどれかを記録します。ログから認証情報を除きます。
許可される場合は対象ポートも直接試します。https:// が平文 HTTP ポートを指せば同じ失敗になり、LB や傍受装置も境界を変えます。
証明書とバージョンのエラーを分ける
CERTIFICATE_VERIFY_FAILED は TLS 後の認証問題で、verify=False は平文端点を TLS に変えません。WRONG_VERSION_NUMBER はより前の層です。
UNSUPPORTED_PROTOCOL は別の分岐です。端点が TLS を話すと証明してから SSLContext と対応バージョンを比べます。
一つの設定源だけを直して終了を証明する
実際に誤った経路を出した要求、Session、環境、OS または配備設定だけを直します。HTTP プロキシの URL は HTTPS 対象でも http:// です。
検証を有効にして再試行し、プロキシ、CONNECT、対象証明書、応答を確認します。実サービスも再起動して一時環境だけの成功でないことを証明します。
