PythonでpymongoによりMongoDB Atlasに接続した際にSSLエラーで接続できなかったことがあるため、その時の対処方法についてまとめます。
pymongoでMongoDB Atlasに接続した際のSSLエラー
MongoDBは、ドキュメント志向データベースとして有名なデータベースです。以下の記事でpymongoによるMongoDBの使用方法について紹介しています。
上記記事では、MongoDBとしてクラウドで使用できるMongoDB Atlasを利用した例を紹介しています。
pythonでクラウドのMongoDB Atlasへ接続しようとした際に、以下のようなエラーが表示されて接続できなかったことがありました。(※以下はエラーの一部抜粋です)
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired
本記事では、その時に調べて対処した時の方法について紹介します。
エラーの要因と対処方法
エラーの要因
エラーの内容から考えるとSSLの証明書関連の認証で失敗しているようなことは予想がされました。少し調べてみたところ、WindowsクライアントにインストールされているLet’s Encryptの証明書の有効期限が切れていることが原因だったようです。MongoDB AtlasではLet’s Encryptoを使用しているようです。
クライアントの証明書状態を確認するには、[コントロールパネル]-[ネットワークとインターネット]-[インターネットオプション]を開きます。コンテンツタブの「証明書」ボタンを押し、さらに証明書画面の「中間証明機関」タブでLet’s Encryptというものを探します。
上記の例では有効期限が2021/3/18になっていました。なお、MongoDB Atlasへ接続しようとしてSSLのエラーが発生したのは2022年4月でしたので、有効期限が切れてしまっていたことが原因であることがわかりました。
Let’s Encryptoは、無料のSSL証明書認証局であり、米国の非営利団体であるISRG(Internet Security Research Group)により運営されている証明書認証局です。
対処方法
対処方法としては、有効期限が切れているLet’s Encryptoの証明書をインストールします。証明書はhttps://letsencrypt.org/certificates/から取得できます。
リンク先のページ内のIntermediate Certificates部分のActiveから「Signed by ISRG Root X1: der, pem, txt」の「der」をクリックします。
クリックしてインストールされたファイルを開きます。
「開く」をクリックします。
有効期間を確認して「証明書のインストール」をクリックします。
証明書インポートウィザードが表示されるので「現在のユーザー」を選択して「次へ」をクリックします。
「証明書の種類に基づいて、自動的に証明書ストアを選択する」を選択して「次へ」をクリックします。
「完了」をクリックします。
正しくインポートされたことが表示されれば正常にインポート完了です。
証明書ウィンドウも「OK」で閉じます。
以上で証明書のインストールは完了です。この作業実施後は、MongoDB Atlasへの接続におけるエラー表示が解消されました。