高見知英の技術ログ

技術関係のログをQiitaから移行してきました。プログラミングのほか、使っているアプリの細かい仕様についてなど書いていきます。

Let's EncryptのルートCA期限切れに対応する

昨日から、Pythonで作ったプログラムのurllib.request.urlopenがなにやら以下のエラーで失敗するようになっていました。

<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1129)>

なんでだろう と考えていて思い立って気付いた結果が、Let's EncryptのルートCA期限切れ。

jp.techcrunch.com

最近のブラウザなどは大抵問題ないようになっていますが、urllibモジュールは普通に影響を受けたようです。

(暫定的な?)解決策

とりあえず暫定的な対策としては、SSL証明書の有効期限切れを無視するようにすること。

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

・・・

urlopenメソッドの前に、上記のコードを呼んでおけば問題ないです((引用先のコードを見ると一見urllib.requestimport前に呼び出す必要がありそうですが、そういうわけではないみたい))。

end0tknr.hateblo.jp

最終的にはたぶんモジュールの方で対策されたりするんじゃないかなあ と思いますが、それまではこれで。