0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】RDSでエラー「TLS/SSL error: self-signed certificate in certificate chain 」が発生

0
Posted at

概要

AWS BatchからRDSへアクセスしたら以下のエラーが返されました。

TLS/SSL error: self-signed certificate in certificate chain

前提

利用しているRDSは、検証環境かつVPC内部の通信のみです。

RDSのMySQLのバージョンは、MySQL 8.4.6。
AWS Batchで利用していたAMIは、amzn2-ami-ecs-hvm-2.0.20240802-x86_64-ebs。

AWS Batch側で指定しているのは、EC2 on ECSで、
Dockerイメージは、Python3.12、以下を実行してあります。

RUN apt-get update && apt-get install -y default-mysql-client && rm -rf /var/lib/apt/lists/*

原因

RDSのパラメータグループを確認すると、
require_secure_transportengine-defaultになっていました(MySQLのデフォルトは OFF)。
なので、RDS側でSSLを強制しているわけではありません。

新しいバージョンのMySQLクライアントでは--ssl-mode=PREFERREDがデフォルトで、
サーバーがSSLをサポートしている場合はSSL接続を試みて、
RDSの証明書チェーンの検証に失敗する、ということがあるようですが、
同じようなバージョンと構成を他環境でも利用していたので、これが原因かどうかは不明...。

解決方法

ということで、原因はいまいちわかりませんが、エラーが解消された方法をシェアします。
コマンドを以下のように変更すれば、エラーはなくなり正常にバッチが実行されました。

BEFORE

mysql -h $RDS_HOST -P $RDS_PORT ...

AFTER

mysql --skip-ssl -h $RDS_HOST -P $RDS_PORT ...

検証環境であり、また、VPC内部での通信しかないため、上記で問題はないと思います。

参考

ちなみにMySQL公式クライアントでは5.7以降、--skip-sslは非推奨になっています。

Use --ssl-mode=DISABLED instead of --ssl=0, --skip-ssl, or --disable-ssl.
https://dev.mysql.com/doc/refman/5.7/en/connection-options.html

ただし、MariaDBクライアントでは --ssl-modeオプション自体が存在しないため、--skip-sslを使用するのが正しい方法とのこと。

Dockerイメージで実行していたのが、
どうやらMariaDBクライアントをインストールしていたらしく、

  • --ssl-mode=DISABLED → 使えない
  • --skip-ssl → 使える

という状況になっていたようです。

そのため、--ssl-mode=DISABLEDで実行すると以下のエラーになりました。

mysql: unknown variable 'ssl-mode=DISABLED'

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?