CERTIFICATE_VERIFY_FAILED
が出てWEBページが取得できないPythonで requests.get
を使っていると、このようなエラーが出ることがある。
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)
メッセージからわかるようにサーバー証明書の検証に失敗している。
セキュリティ的にはこのようなサイトにはアクセスするべきではない。
しかし通信先が正規のサイトだとわかっている場合は、それでも requests.get
でアクセスしたいこともあるだろう。
そこで今回はPythonのrequests.getで「SSL: CERTIFICATE_VERIFY_FAILED」になる場合の対処方法について紹介する。
この記事を書いている人
記事を読むメリット
Pythonのrequests.getで「SSL: CERTIFICATE_VERIFY_FAILED」になる場合の対処方法がわかり、SSLエラーが出ても対処できるようになる
Pythonのrequests.getで「SSL: CERTIFICATE_VERIFY_FAILED」になる場合の対処方法
Pythonのrequests.getで「SSL: CERTIFICATE_VERIFY_FAILED」になる場合に、それでもどうしてもアクセスしたいときは検証をしないという方法がある。
通常は以下のように requests.get
を使っていると思う。
response = requests.get(url)
これを以下のように verify=False
を追加する。
response = requests.get(url=url, verify=False)
これでサーバー証明書の検証は行わないので、「SSL: CERTIFICATE_VERIFY_FAILED」が発生することは無い。
サーバー証明書の検証をしないのはセキュリティ的に良くない
「SSL: CERTIFICATE_VERIFY_FAILED」を避ける方法として検証をしない方法を挙げたが、冒頭で述べたように本来はアクセスすべきではない。
サーバー証明書の検証でエラーになるということは、サーバー証明書が無効であったり有効期限が切れていたりしているので、信頼できる状態ではない。
アクセス先のWEBサイトの管理者も自分なのであれば、サーバー証明書の更新をした方がいい。
自分が管理しているサイトでないなら、業務でアクセスしたり、業務システムのダータ収集元として採用するのもやめた方がいいだろう。
アクセスするとしても、あくまで自分で責任を取ることができる私的な活動に留めておくことのがよいと思う。