RDS のCA証明書が2019になるとアナウンスがあって、最終警告っぽいメールがきてたので慌てて対応。
そのメールのタイトルはこちら。
重要なお知らせ:2020年2月5日までに
お客様のAmazon RDS SSL/TLS証明書の更新を行ってくださ い | Important Reminder: Update Your Amazon RDS SSL/TLS Certificates by February 5, 2020
ドキュメントを見て、証明書をダウンロードして、
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html
クライアントからテストしてみたらここまではスムーズに通る
mysql -h myinstance.c9akciq32.rds-us-east-1.amazonaws.com
--ssl-ca=[full path]rds-combined-ca-bundle.pem --ssl-mode=REQUIRED
しかし nodejsのプロジェクトからmysql2を利用したDBアクセスが疎通しない。
なんとか動かしてみられたので、原因を記録
原因1:中間証明書を含むpemをつかっていない
原因2:Node v12以降は、TLSv1.0が使えない
対処1:中間証明書とRoot証明書を含むpemを使う
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html
対処2:(暫定対処)
Node v11を使う
(最新が使いたいので、Connection のオプションに以下などとしてみたが疎通しない。)
暫定対処で、v11を使うことにした。
nを使ってNodeのバージョンを切り替えられるようにする
// インストール
npm i -g n
// リストアップ
sudo n list
// バージョンのインストールと利用(11.x.xが入って有効になる)
sudo n v11
// バージョン確認
node -v
恒久対処に向けて覚書
Nodeのバージョンをあげたい。TLSv1.3を使ってセキュアにDBアクセスしたい。
mysql2のConnection生成時に以下を書いてみたが、Node11なら通る。Node13なら通らない。
ca: fs.readFileSync( [Caのパス] ),rejectUnauthorized: false,maxVersion: 'TLSv1.3',minVersion: 'TLSv1.3'}