【Python】pythonから外部アクセスする際にURLError:<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failedが出るときの対処法

概要

Pytorchを使用している際に、CIFAR10をダウンロードしようとしたところ、SSL関連のエラーが発生したため、その対処法についてメモしておきます。

エラーの発生状況

Pytorchのtorchvision.datasets.CIFAR10(CIFAR10 — Torchvision 0.14 documentation (pytorch.org))を使用してデータセットをダウンロードしようとしました。

from torchvision import datasets
dataset = datasets.CIFAR10(root = 'data', download = True)

すると次のようにSSL関連のエラーが発生してしまいました。

URLError:<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

対処法

ネット等で調べてみると、このエラーはSSLの証明書の期限切れで発生するエラーのようです。

対処方法としてはSSLの証明書確認をOFFにして接続するという方法があるようです。

以下を参考にしました。

Trying to CIFAR-10 from torchvision.datasets and receiving URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1129)> · Issue #5039 · pytorch/vision · GitHub

具体的には、ダウンロードを行うコードの前に以下を書いておくだけです。

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

これにより、無事にダウンロードが実行されるようになりました。

ただし、サーバー証明書確認を行わずにダウンロードすることになるので、セキュリティ面では良くは無いとは思います。

まとめ

  • URLError:<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failedはSSL証明書の\期限切れによって発生するエラー
  • SSL証明書の確認をOFFにするコードを実行すればアクセスを実行することが可能

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です