PythonでAPIを呼び出す際に、SSL: CERTIFICATE_VERIFY_FAILED
エラーが発生することがあります。このエラーは、SSL証明書の検証に失敗した場合に発生します。以下に、この問題の原因と対処法について説明します。
原因
このエラーは、Pythonのrequests
ライブラリを使用してHTTPSのエンドポイントにAPIコールを行った際に発生します。具体的には、以下のようなエラーメッセージが表示されます。
requests.exceptions.SSLError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: /exampleapi (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)'),))
このエラーの主な原因は、システムがRoot認証局の証明書については持っているが、中間認証局の証明書を持っていない場合です。
対策
この問題に対する対策は、中間認証局の証明書を渡すことです。具体的には、以下の2つの方法があります。
verify
にRoot認証局の証明書と中間認証局の証明書のあるフォルダパスを渡す。
requests.get('https://example.com/someapi', verify='/etc/ssl/certs')
- 中間認証局の証明書を含めた、単一の証明書ファイルを更新する。
requests.get('https://example.com/someapi', verify='/etc/ssl/certs/ca-certificates.crt')
以上の方法で、SSL: CERTIFICATE_VERIFY_FAILED
エラーを解決することができます。ただし、これらの方法はセキュリティ上のリスクを伴う可能性があるため、適切な対策を講じることが重要です。