pymongoの[SSL: CERTIFICATE_VERIFY_FAILED]を解決する

エラー概要

FastAPIとMongoDBを接続しようとしたところ、以下のエラーが出ました。

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

SSL証明書の検証に失敗し、その結果としてMongoDBサーバーへの接続がタイムアウトしていました。

対処法

certifiをインストールし、AsyncIOMotorClientの第二引数にtlsCAFile=certifi.where()を渡します。

plain text
pip install certifi
plain text
client = motor.motor_asyncio.AsyncIOMotorClient('mongodb+srv://<user>:<password>@fastapi.eaqzx3y.mongodb.net/?retryWrites=true&w=majority&appName=<appnName>', tlsCAFile=certifi.where())

備考

証明書の期限切れでも同様のエラーが発生するようです。 筆者の場合は期限切れによるエラーではなかったのでcertifiを使い、PythonでSSL証明書の信頼性を検証するようにしました。