MongoDB Node.js DriverでAmazon DocumentDB(TLS有効)に接続するとunable to get local issuer certificate

AWSコンソールで確認したURIを指定してMongoDB Node.js driver( mongodb 3.0.2 )でDocumentDB(TLS有効)に接続しようとしたところ、 MongoNetworkError: unable to get local issuer certificate となってしまいました。

事象

DBの接続情報は作成したクラスタConnectivity & security で確認しました。

f:id:hiroki-sawano:20201025194809p:plain

まずは指示通りCA証明書をダウンロードします。

❯ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

続けて、 MongoClient.connect で上図に記載のURIをそのまま指定しました。

MongoClient.connect('mongodb://<username>:<password>@....docdb.amazonaws.com:27017/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

すると以下のエラーが発生しました。

Failed Mongo connection: failed to connect to server [...] on first connect [MongoNetworkError: unable to get local issuer certificate]

原因

以下のリンク先によると、 ssltls に、 ssl_ca_certstlsCAFile にしないと駄目だったようです。

https://developer.mongodb.com/community/forums/t/mongonetworkerror-unable-to-get-local-issuer-certificate/3518/5

対策

URIを以下の通り書き換えることで接続に成功しました。

MongoClient.connect('mongodb://<username>:<password>@....docdb.amazonaws.com:27017/?tls=true&tlsCAFile=rds-combined-ca-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');