KYC不要 — IDもセルフィーも書類も不要。暗号通貨で支払い:BTC, USDT, USDC, ETH, SOL, LTC
言語: 日本語
今すぐ始める

プロキシエラーリファレンス · 接続とTLSエラー

プロキシ経由のSSL WRONG_VERSION_NUMBER:解決策

クライアントのTLSエラー:各ツールでの正確なメッセージ、考えられる原因の順序、効果的な修正方法。

最終更新:

クイックアンサー

プロキシでのSSL: WRONG_VERSION_NUMBERとは何を意味していますか?

[SSL: WRONG_VERSION_NUMBER] はほぼ常に、クライアントが平文で応答するものに対してTLSハンドシェイクを開始したことを意味します。一般的な原因は、plain HTTPプロキシポートを指すhttps://のプロキシURLです。CrawlRelayでは、HTTPとHTTPS共にゲートウェイアドレスの前にhttp://を書きます。サイト自身のHTTPSはトンネル内で問題なく動作します。

SSL: WRONG_VERSION_NUMBERを一目で理解する

エラーSSL: WRONG_VERSION_NUMBER
タイプクライアントのTLSエラー
送信元TLSに対応していない相手側でのTLSライブラリエラー
定義されている場所TLS 1.3: RFC 8446; HTTP proxy CONNECT: RFC 9110, section 9.3.6
再試行しますか?いいえ。それは設定ミスです。
まず確認することプロキシURLのスキームを確認してください。

SSL: WRONG_VERSION_NUMBERとは何ですか?

TLSはハンドシェイクレコードから始まります。返ってきたバイトがHTTP応答ならばTLSライブラリはバージョン番号が意味不明と判断し停止します。PythonはWRONG_VERSION_NUMBERを報告し、正確な文言はOpenSSLバージョンとクライアントで異なります。

プロキシURLのスキームはクライアントがプロキシとどう通信するかを決めます。http://はプロキシに対して平文HTTPで接続し、続けてCONNECTトンネルとウェブサイトとのTLSを行います。https://はプロキシ自体とTLS通信を行い、プロキシポートがTLSを期待する場合に機能します。

SSL: WRONG_VERSION_NUMBERはPython、curl、Node.js、ブラウザではどのように表示されますか?

同じ失敗でもツールごとに異なる表示になります。ログ検索用のメッセージは以下の通りです:

  • Python requests / urllib3 2.x: SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number')) を ProxyError でラップしています
  • httpx: httpx.ConnectError: [SSL: WRONG_VERSION_NUMBER] wrong version number
  • curl: curl: (35) ... wrong version number (plain proxy用に-x https://を指定した場合)
  • Node.js: エラーメッセージ内のEPROTO ... wrong version number

SSL: WRONG_VERSION_NUMBERの原因は何ですか?

最も可能性が高いのは次の通りです:

  • プロキシアドレスの前にhttps://を付け、plain HTTPのポートを使っている。これが最も多い原因です。
  • TLSを期待するプロバイダからの設定のコピー&ペースト
  • ポート80のhttps://やTLS期待ポートのhttp://などプロキシ以外のURLに使う
  • コードが継承するHTTPS_PROXY=https://...のような環境変数

SSL: WRONG_VERSION_NUMBERを段階的に診断するには?

  1. コードが使うプロキシURLを表示しスキームを確認してください。
  2. 環境にあるHTTPS_PROXYとALL_PROXYを調べてください。
  3. 下のcurlテストを-x http://で実行し機能するか確認してください。
  4. curlは動くがコードが動かないなら、コードまたは環境がまだhttps://を使っています。
curlで失敗したURLをテストする(HTTPポート、詳細表示)
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL

# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URL

SSL: WRONG_VERSION_NUMBERをどう修正しますか?

  • プロキシURLには必ずhttp://を使う: {"http": "http://...", "https": "http://..."}
  • TLS検証をオンのままにしてください。修正はスキームでありverify=Falseではありません。
  • 環境変数の修正をスクリプト内での上書きではなく行う。

SSL: WRONG_VERSION_NUMBERの後に再試行すべきですか?

このエラーは決して再試行しないでください。同じ方法で必ず失敗します。1文字の設定ミスの修正です。

SSL: WRONG_VERSION_NUMBERはCrawlRelayにどう関係しますか?

CrawlRelayのHTTPポートはHTTPSサイトをCONNECTトンネルで運ぶplain HTTPプロキシポートです。TLSはクライアントとサイト間のトンネル内で終端し、ゲートウェイはhttps://のプロキシURLを必要としません。

ゲートウェイ:gw.crawlrelay.com、ポート7777(HTTP、HTTPSはCONNECT経由)、ポート7778(SOCKS5)。ユーザー名形式:USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}。関連情報:SSL証明書検証失敗 · プロキシに接続できません · Pythonガイド。

SSL: WRONG_VERSION_NUMBER:開発者がよく尋ねる質問

http://のプロキシURLを使うと通信は暗号化されないのでしょうか?

HTTPSサイトには不要です。http://スキームはプロキシとの短いCONNECT交換(認証情報を含む)だけをカバーし、その後クライアントはトンネル内でサイトと直接TLS通信します。plain http://サイトはプロキシの有無にかかわらず暗号化されません。

urllib3のアップグレード後にこれが起きたのはなぜですか?

urllib3 2.xはHTTPSプロキシをサポートしており、https://プロキシURLを文字通り受け入れ、プロキシとTLSを開始します。古い環境は誤ったスキームで偶然動くことがありました。plain HTTPプロキシポートには必ずhttp://を書き、エラーを解消してください。

エラーをなくすためにverify=Falseにすべきですか?

いいえ。認証チェックオフではスキームの誤りは直りません。またすべてのリクエストでの傍受リスクが増します。プロキシURLのスキームを直し、本番環境では検証をオンにしてください。

他のプロキシエラーのリファレンス

HTTPステータスコード

ブラウザとクライアントのエラー

接続とTLSエラー

失敗ケースを網羅したドキュメント付きレジデンシャルプロキシ

$0.50/GB発のCrawlRelayレジデンシャルプロキシ、期限切れがないトラフィック。

$0.50/GBから · KYC不要

今すぐ始める