npmのmysql2パッケージでTLS有効にしてRDS接続

nodeのmysql2パッケージには

こんな感じで、ssl接続のオプションに"Amazon RDS"を指定できるが

RDSの証明書更新を行うと不都合があるよという話

証明書更新は以下のrds-ca-2019を置き換える話ね
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html

これ、パッケージ内にCA証明書が入ってるんだけど更新後の証明書が入ってない
そんで、CA証明書更新のPRは出てるんだけど、これ適用するとaurora serverlessとかRDS proxy経由の検証が失敗する

なぜなら、証明書のチェーンがこんな感じになってるので

C = US, O = "Starfield Technologies, Inc.", OU = Starfield Class 2 Certification Authority
    C = US, ST = Arizona, L = Scottsdale, O = "Starfield Technologies, Inc.", CN = Starfield Services Root Certificate Authority - G2
        C = US, O = Amazon, CN = Amazon Root CA 1
            C = US, O = Amazon, CN = Amazon RSA 2048 M02
                CN = *.cluster-ctapflxgnyle.ap-northeast-1.rds.amazonaws.com

直で接続する場合のチェーンと異なるから

C = US, O = "Amazon Web Services, Inc.", OU = Amazon RDS, ST = WA, CN = Amazon RDS ap-northeast-1 Root CA RSA4096 G1, L = Seattle
    C = US, O = "Amazon Web Services, Inc.", OU = Amazon RDS, ST = WA, CN = Amazon RDS ap-northeast-1 Subordinate CA RSA4096 G1.A.4, L = Seattle
        CN = cert-test01-instance-1.ctapflxgnyle.ap-northeast-1.rds.amazonaws.com, OU = RDS, O = Amazon.com, L = Seattle, ST = Washington, C = US

ちなみに2019CAは Amazon RDS Root 2019 CA をルートとするチェーンになってる

結論

RDS proxy か、serverlessの場合は自分で /etc/ssl/certs/ 配下の証明書を読んで検証したほうが良い
直接続の場合は自分でCA証明書落として検証したほうが良いと思う
というかRDSへの接続がVPCに閉じてるならtls無しで接続しても良いと思う