RDSのMySQLインスタンスへの接続にSSL接続を使用することが出来ない

0

環境

MySQL 5.7.42

問題

クライアントからMySQLへ接続する際に、SSL証明書をクライアントに要求させたいが、出来ない。

MySQLの接続時に証明書の要求はされずに接続ができてしまう

> mysql -h {ホスト名} -u {ユーザー名} -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 26
Server version: 5.7.42-log Source distribution

期待する結果

  • 証明書を前提とした接続を確立したい
  • 証明書を指定しなかった場合、以下のエラーで返ること
> mysql -h {ホスト名} -u {ユーザー名} -p
MySQL Error 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.

試したこと

1. require_secure_transport パラメータを設定

  • こちらの方法を参考に当該パラメータを設定
  • DBに接続し、設定値を確認
mysql> SHOW VARIABLES LIKE 'require_secure_transport';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| require_secure_transport | ON    |
+--------------------------+-------+
  • MySQLの接続時に証明書の要求はされずに接続ができてしまう
> mysql -h {ホスト名} -u {ユーザー名} -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 26
Server version: 5.7.42-log Source distribution
  • sslオプションを付与してログインするも、証明書の検証をしないと表示
 mysql --ssl-mode=REQUIRED --ssl-ca={path} -h {ホスト名} -u {ユーザー名} -p
WARNING: no verification of server certificate will be done. Use --ssl-mode=VERIFY_CA or VERIFY_IDENTITY.

2. 特定のユーザーにSSL接続を行うように権限を与える

  • 特定のユーザーのログインの際に、SSL接続を行うように設定
GRANT USAGE ON *.* TO 'some-user'@'%' REQUIRE SSL;

Query OK, 0 rows affected (0.19 sec)
  • 1と同様、sslオプションを付与せずともMySQLにログインできてしまう

3. MySQLインスタンス内でのssl関連の設定値の確認

mysql> SHOW VARIABLES LIKE '%ssl%';
+-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name                       | Value                                                                                                                                                                                                                                                                                   |
+-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| have_openssl                        | YES                                                                                                                                                                                                                                                                                     |
| have_ssl                            | YES                                                                                                                                                                                                                                                                                     |
| performance_schema_show_processlist | OFF                                                                                                                                                                                                                                                                                     |
| ssl_ca                              | /rdsdbdata/rds-metadata/ca-cert.pem                                                                                                                                                                                                                                                     |
| ssl_capath                          |                                                                                                                                                                                                                                                                                         |
| ssl_cert                            | /rdsdbdata/rds-metadata/server-cert.pem                                                                                                                                                                                                                                                 |
| ssl_cipher                          | {ハッシュ値}
| ssl_crl                             |                                                                                                                                                                                                                                                                                         |
| ssl_crlpath                         |                                                                                                                                                                                                                                                                                         |
| ssl_key                             | /rdsdbdata/rds-metadata/server-key.pem                                                                                                                                                                                                                                                  |
+-------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
10 rows in set (0.21 sec)
質問済み 5ヶ月前939ビュー
1回答
0
承認された回答

ドキュメントを見るとデフォルトでSSL接続が有効になっているようです。
https://dev.mysql.com/doc/refman/8.0/ja/using-encrypted-connections.html

サーバー側では、--ssl オプションは、サーバーが暗号化された接続を許可するが必要としないことを指定します。 このオプションはデフォルトで有効になっているため、明示的に指定する必要はありません。

試しに接続コマンドに「--ssl-mode=DISABLED」を付けて実行してみてください。
このオプションはSSL接続を使用しないで接続するためのオプションです。
RDS側でrequire_secure_transportが有効になっていれば接続に失敗するはずです。

mysql -h {ホスト名} -u {ユーザー名} -p --ssl-mode=DISABLED

証明書の検証を行う場合は「--ssl-mode=VERIFY_CA」というオプションになると思います。

profile picture
エキスパート
回答済み 5ヶ月前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン