- 侵入されて通信を見られた場合に有効か(VPCで完結する場合)
- DBインスタンスとアプリ間の接続に SSL (AES-256) を使用できる
- AuroraのSSLサポートはRDSと同じプロセスと公開鍵を使用している
- DBインスタンス作成時にRDSはSSL証明書を作成し、インスタンスにインストールする。SSL証明書は認証局によって署名されている。SSL証明書にはそのDBインスタンスのエンドポイントがCN(Common Name)に含まれており、なりすまし攻撃を防げるようにしている。クライアントがSAN(Subject Alternative Names)をサポートしている場合、DBクラスターのエンドポイントだけを使用してSSL接続することができる。サポートしていない場合は、プライマリインスタンスの(インスタンス)エンドポイントを使用する必要がある。(?)
- MySQL 5.6ではTLS 1.0、MySQL 5.7ではTLS 1.0, 1.1, 1.2をサポートしている
- SANをサポートするクライアントとしてはMariaDB Connector/Jを推奨
- 公開鍵はhttps://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pemで取得できる
-
mysqlコマンドでは--ssl-caパラメータに公開鍵を指定する
MySQL 5.7以降
mysql -h myinstance.c9akciq32.rds-us-east-1.amazonaws.com --ssl-ca=[full path]rds-combined-ca-bundle.pem --ssl-mode=VERIFY_IDENTITY
MySQL 5.6以前
mysql -h myinstance.c9akciq32.rds-us-east-1.amazonaws.com --ssl-ca=[full path]rds-combined-ca-bundle.pem --ssl-verify-server-cert
- (これも公開鍵?)すべてのリージョンで使用できるルート証明書はhttps://s3.amazonaws.com/rds-downloads/rds-ca-2015-root.pemで取得できる。アプリが証明書のチェーンに対応していない場合はリージョン固有の証明書(中間証明書)を取得して使用する。
-
MySQLの機能を使用して、特定のユーザーについてSSL接続を必須とすることができる
MySQL 5.7以降
ALTER USER 'encrypted_user'@'%' REQUIRE SSL;
encrypted_userがユーザー名
MySQL 5.6以前
GRANT USAGE ON *.* TO 'encrypted_user'@'%' REQUIRE SSL;
- MySQLのSSL接続についてのドキュメントも参照
-
MySQLサーバー側でSSL接続を必須にするには設定ファイルにrequire_secure_transportを指定するか、サーバー実行中に以下のコマンドを実行する
MySQL 5.7
[mysqld]
require_secure_transport=ON
SET PERSIST require_secure_transport=ON;
require_secure_transportは5.7.8で追加されたようである。5.6にはない
- サーバー側がSSL必須かにかかわらず、クライアント側で必須としたい場合は、--ssl-modeにREQUIRED、VERIFY_CA、VERIFY_IDENTITYを指定する