エラー概要
FastAPIとMongoDBを接続しようとしたところ、以下のエラーが出ました。
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1129)
SSL証明書の検証に失敗し、その結果としてMongoDBサーバーへの接続がタイムアウトしていました。
対処法
certifiをインストールし、AsyncIOMotorClientの第二引数にtlsCAFile=certifi.where()を渡します。
pip install certifi
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証明書の信頼性を検証するようにしました。