レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

BLOCKVROCKリファレンス目次はこちら

NodeからRDSの接続で SSL/TLSの証明書を rds-ca-2019に更新する

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なら通らない。

,ssl : {
ca: fs.readFileSync( [Caのパス] )
,rejectUnauthorized: false
,maxVersion: 'TLSv1.3'
,minVersion: 'TLSv1.3'
}