0
2

More than 1 year has passed since last update.

PyMongoでMongoDB Atlasに接続するとSSL: CERTIFICATE_VERIFY_FAILED

Posted at

環境

  • OS: Windows 10 Pro 21H1 (19043.1320)
  • Python: 3.8
  • PyMongo: 3.12.1

状況

PythonのライブラリであるPyMongoを使って、MongoDB Atlasで作ったクラスタに接続しようとすると、下記のような例外が発生し、接続することができませんでした。

pymongo.errors.ServerSelectionTimeoutError: hogehoge-shard-00-00.usai2.mongodb.net:27017:
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1124)

解決策

StackOverflowにて、解決方法が回答されていました。

エラーの原因としては、自身のWindowsクライアントにインストールLet’s Encryptのルート証明書(ISRG Root X1)または中間証明書(Let’s Encrypt R3)の有効期限が切れているからのようです、たぶん。
(MongoDB AtlasはLet’s Encryptを使用している)

確認してみると、自分の場合は中間証明書の期限が切れていました。(注:今回の事象発生は2021/10/29)
期限切れ証明書

ですので、期限が切れている証明書を更新します。まず、下記ページにアクセスします。

ルート証明書を更新する必要がある場合は、「Root Certificates」->「Active」->「ISRG Root X1」->「der」をクリックして、証明書をダウンロードします。
ルート証明書
中間証明書を更新する必要がある場合は、「Intermediate Certificates」->「Active」->「Let’s Encrypt R3」->「der」をクリックして、証明書をダウンロードします。
中間証明書

あとは、ダウンロードした証明書をそれぞれインストールするだけです。

ダウンロードした証明書ファイルをダブルクリックして開きます。
derファイルをダブルクリック
セキュリティの警告が表示された場合は、そのまま「開く」をクリックします。
「開く」をクリック
有効期限が切れていないことを確認し、「証明書のインストール」をクリックします。
証明書のインストール
インポートウィザードが開きます。保存場所は任意の場所を選択し、「次へ」をクリックします。
保存場所
「証明書の種類に基づいて、自動的に証明書ストアを選択する」を選択し、「次へ」をクリックします。
証明書ストア
「完了」をクリックします。
完了
「正しくインポートされました。」というメッセージが表示されるので、「OK」をクリックします。
OK
証明書ウィンドウも「OK」をクリックして閉じます。
OK

以上で、新しい証明書がインストールできました。

証明書を更新することで、正常にMongoDB Atlasのクラスタへ接続することができました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2