昨日から、Pythonで作ったプログラムのurllib.request.urlopen
がなにやら以下のエラーで失敗するようになっていました。
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1129)>
なんでだろう と考えていて思い立って気付いた結果が、Let's EncryptのルートCA期限切れ。
最近のブラウザなどは大抵問題ないようになっていますが、urllibモジュールは普通に影響を受けたようです。
(暫定的な?)解決策
とりあえず暫定的な対策としては、SSL証明書の有効期限切れを無視するようにすること。
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
・・・
urlopen
メソッドの前に、上記のコードを呼んでおけば問題ないです((引用先のコードを見ると一見urllib.request
のimport
前に呼び出す必要がありそうですが、そういうわけではないみたい))。
最終的にはたぶんモジュールの方で対策されたりするんじゃないかなあ と思いますが、それまではこれで。