環境
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)