SSL を修正: Python の CERTIFICATE_VERIFY_FAILED エラー

Zeeshan Afridi 2023年10月10日
  1. SSL証明書
  2. SSL: CERTIFICATE_VERIFY_FAILED エラーの原因
  3. SSL: CERTIFICATE_VERIFY_FAILED エラーを修正
  4. SSL で未検証のコンテキストを作成して、SSL: CERTIFICATE_VERIFY_FAILED エラーを修正する
  5. SSL で未検証の HTTP コンテキストを作成して、SSL: CERTIFICATE_VERIFY_FAILED エラーを修正する
  6. pip コマンドで SSL: CERTIFICATE_VERIFY_FAILED エラーを修正
  7. Requests モジュールを使用して SSL: CERTIFICATE_VERIFY_FAILED エラーを修正する
  8. まとめ
SSL を修正: Python の CERTIFICATE_VERIFY_FAILED エラー

SSL は、ユーザーとサーバーの間で送信されるデータを暗号化するためのプロトコルです。 サーバーはデジタル証明書を作成してクライアントに送信し、データが改ざんされないようにします。

SSL 証明書を作成するとき、CA はドメインをチェックします。

証明書で指定されたアドレスにドメインが存在しない場合、CA は認証局 (CA) にエラーを返します。 SSL と SSL: CERTIFICATE_VERIFY_FAILED エラーの原因について詳しく説明します。

SSL証明書

SSL 証明書は、企業が Web ブラウザとの安全で暗号化された接続を確立できるようにするデジタル証明書です。 企業が SSL 証明書を持っている場合、企業と Web ブラウザの間で交換されるすべての情報が暗号化されるため、だれもがデータを傍受して読み取ることが困難になります。

これは、クレジット カード番号やログイン資格情報などの機密情報を保護するのに役立つため、企業にとって重要です。

SSL: CERTIFICATE_VERIFY_FAILED エラーの原因

SSL: CERTIFICATE_VERIFY_FAILED エラーの背後にはいくつかの理由があります。 それぞれについて以下に説明します。

  1. Web サイトの SSL 証明書が無効である可能性があります。これは、Web サイトがクライアントとサーバー間のデータと通信を暗号化するために有効な証明書を使用していないことを意味します。 その結果、ブラウザは Web サイトの身元を確認できません。

    これは、セキュリティ リスクになる可能性があります。 これは、データが適切に暗号化されておらず、第三者によって傍受される可能性があることを意味します.

  2. 別の可能性として、ブラウザが Web サイトの SSL 証明書を認識していない可能性があります。 これは、Web サイトが自己署名証明書または不明な機関からの証明書を使用している場合に発生する可能性があります。

    いずれの場合も、ブラウザは Web サイトの ID を適切に確認できず、セキュリティ上のリスクになる可能性があります。

  3. 最後に、ウェブサイトの SSL 証明書チェーンに問題がある場合、SSL: CERTIFICATE_VERIFY_FAILED エラーも発生する可能性があります。 これは、チェーン内の証明書のいずれかが期限切れまたは失効している場合、または Web サイトが古い SSL バージョンを使用している場合に発生する可能性があります。

    このエラーが表示された場合は、Web サイトの所有者に連絡して、問題を解決するよう依頼する必要があります。

SSL: CERTIFICATE_VERIFY_FAILED エラーを修正

SSL: CERTIFICATE_VERIFY_FAILED エラーが表示された場合、コンピューターはアクセスしようとしている Web サイトの SSL 証明書を検証できません。 これは、Web サイトの SSL 証明書の問題、コンピューターの信頼ストア、ネットワークの問題など、さまざまな理由で発生する可能性があります。

SSL: CERTIFICATE_VERIFY_FAILED エラーを修正するには、その原因を突き止める必要があります。

ウェブサイトの SSL 証明書に問題がありますか? その場合は、別のブラウザーを使用してサイトにアクセスするか、Web サイトの所有者に連絡して知らせてください。

問題がコンピューターのトラスト ストアにある場合は、トラスト ストアを最新の証明書で更新する必要があります。 問題がネットワークにある場合は、ネットワーク接続のトラブルシューティングを行う必要があります。

SSL で未検証のコンテキストを作成して、SSL: CERTIFICATE_VERIFY_FAILED エラーを修正する

SSL に関して考慮すべき最も重要なことの 1つは、SSL が使用されるコンテキストです。 残念ながら、SSL が使用されるコンテキストは特定の状況によって異なるため、この質問に対する万能の答えはありません。

ただし、より安全な SSL コンテキストを作成するのに役立つ一般的なヒントがいくつかあります。

まず、すべての SSL 接続が強力な暗号化を使用して行われるようにすることが重要です。 これは、SHA-256SHA-512 などの強力なアルゴリズムを使用し、すべてのキーの長さが少なくとも 2048 ビットであることを保証することを意味します。

さらに、SSL 接続を確立する前にサーバーの身元を確認することが重要です。 これは、認証局などの信頼できるサードパーティ ソースに対してサーバーの証明書をチェックすることで実行できます。

最後に、SSL 接続が適切に構成されていることを確認することも重要です。 これには、すべての接続が正しいプロトコルと暗号スイートを使用して行われていること、およびすべての証明書が適切に検証されていることを確認することが含まれます。

これらのヒントに従うことで、より安全な SSL コンテキストを作成することができます。これにより、機密データを保護し、通信を非公開に保つことができます。

import ssl

context = ssl._create_unverified_context()
urllib.request.urlopen(req, context=context)

SSL で未検証の HTTP コンテキストを作成して、SSL: CERTIFICATE_VERIFY_FAILED エラーを修正する

SSL では、サーバーの証明書の検証を単に省略するだけで、検証されていない HTTP コンテキストを作成できます。 クライアントが中間者攻撃に対して脆弱になるため、これはお勧めできません。

ただし、自己署名証明書を使用するサーバーに接続する場合など、場合によっては必要になる場合があります。

import ssl

ssl._create_default_https_context = ssl._create_unverified_context
urllib2.urlopen("https://google.com").read()

pip コマンドで SSL: CERTIFICATE_VERIFY_FAILED エラーを修正

pip で SSL 証明書を更新するには、pip の最新バージョンがインストールされていることを確認してください。 これを行うには、次のコマンドを実行します。

pip install --upgrade pip

pip の最新バージョンを取得したら、次のコマンドを実行して SSL 証明書を更新できます。

pip install --upgrade certifi

特定の理由で SSL 証明書を更新する必要がある場合は、pip コマンドで --force-reinstall オプションを使用できます。 これにより、pip は認定パッケージを強制的に再インストールし、既存のファイルを上書きします。

pip install --upgrade certifi --force-reinstall

Requests モジュールを使用して SSL: CERTIFICATE_VERIFY_FAILED エラーを修正する

Python リクエスト ライブラリは、HTTP リクエストを作成するための優れたツールです。 SSL 検証をバイパスするために、ssl_verify オプションを False に設定する必要がある場合があります。

これは、無効または自己署名の SSL 証明書を使用してサーバーに接続しようとしている場合に役立ちます。 このオプションをFalseに設定することは、中間者攻撃に対して脆弱になる可能性があるため、一般的にはお勧めできません。

requests.get(url, headers=Hostreferer, verify=False)

まとめ

SSL は、サーバーとクライアント間のセキュリティと信頼を提供するプロトコルです。 店舗でクレジット カードを使用する場合など、機密情報を保護する必要がある多くの場合に使用されます。

どうしたの? SSL を使用する場合、python-requests ライブラリに問題があります。

Python を使用して SSL を使用するサーバーに要求する場合、ライブラリは既定で証明書をチェックして信頼できることを確認します。 問題は、デフォルトの Python インストールに、考えられるすべての SSL 証明書のルート証明書が含まれていないことです。

自己署名 SSL 証明書または Python 証明書ストアにない CA からの証明書を使用するサーバーにリクエストを行うと、リクエストが失敗します。 SSL エラーのエラー コードで HTTP エラーが発生します。

著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

関連記事 - Python Error