初めてMySQLをSSL接続してみた。
ほんとにAWSと利用して学習の学習はやりやす。ドキュメントが豊富で学習がしやすい。
本日は初めてMySQLへSSL接続をしてみたので、記録に残しておきます。
tcpdumpでキャプチャー
sudo yum install -y tcpdump
sudo tcpdump -tttt -l -i eth0 -A -n -s 0 dst port 3306 | grep -iE "select|update|delete|insert"
このコマンド一発でSQL文を観測することができます!!
.....I......INSERT INTO books VALUES('210', 'Tom', '', 'hamasaki', 30.75, 0, 1995, 'What a cool book.', 20)
MySQLのSSLはUserに対してSSLの利用を要求する形で設定する。という認識でよろしいのかな?
SSLを利用する
MySQL DB インスタンスで SSL を使用する
私はAWSのRDS,MySQL エンジンバージョン5.7.22を利用していましたが、MySQL 5.7以降のコマンドではエラーが出てしまい、MySQL5.6以前の方のコマンドで実行しました。
手順1 証明書をダウンロードする
手順2 MySQLに接続して、ユーザへSSLの利用要求を設定する
# wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
# mysql -h <endpoint> --ssl-ca=/rds-combined-ca-bundle.pem --ssl-mode=VERIFY_IDENTITY -u <Adminuser> -D <databasename> -p
Unknown value to --ssl-mode: 'VERIFY_IDENTITY'. Use --ssl-mode=REQUIRED
# mysql -h <endpoint> --ssl-ca=/rds-combined-ca-bundle.pem --ssl-verify-server-cert -u <Adminuser> -D <databasename> -p
Enter password:
Welcome to the MySQL monitor.
mysql> GRANT USAGE ON *.* TO '<Adminuser>'@'%' REQUIRE SSL;
# mysql -u <Adminuser> -h <endpoint> --ssl-ca=/rds-combined-ca-bundle.pem --ssl-verify-server-cert -p<password> <databasename> < insert.sql
これだけでSQL文が平文で流れることがありません。