目次
実行環境
python3(jupyter notebook)
症状
Requestsライブラリーを使用してGETリクエストやPOSTリクエストを行おうとする際や、pipでモジュールをインストールしようとした際に
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)>
というエラーが表示される。
原因
https通信はSSL/TLSを利用することで通信を暗号化してセキュアな通信を行う通信方法であり、このhttps通信を行う際にはサーバーの証明書のチェックが行われる。Requestsモジュールを使用して通信する際、certifiモジュールに記載されている証明書リストをもとにチェックが行われる。Requestsモジュールの古いバージョンでは、certifiモジュールではなく、Requestsモジュール自体に記載されている証明書リストを使用してチェックが行われる。
よって、Requestsモジュールが古いか、certifiモジュールが古いと証明書の認証に失敗し、上記のようなエラーが発生してしまう。
対処法
以下のコマンドでcertifiモジュールをアップデートする。
pip install --upgrade pip
pip install --upgrade certifi
上記のコマンドを実行してもエラーが解決しない場合は、以下のコマンドでRequestsモジュールをアップデートする。
pip install --upgrade requests
※python3 の場合はpipではなくpip3コマンドを使用する
※jupyter notebook使用時は、上記のコマンドを実行したらjupyter notebookを再起動する。
参考
https://dev.classmethod.jp/articles/how-to-manage-ca-root-certs-for-requets-library/