パターン1:SSL(自己証明書)にて暗号化する†説明†MySQLサーバーへローカルIPアドレス経由ではなく、インターネット経由でアクセスしたい場合、そのまま3306ポートに接続すると盗聴された場合にSQL文が平文でで表示されます。 手順†※CA証明書とMySQLサーバー用のCSRのコモンネームは別々にする # cd /etc/pki/tls/ # mkdir mysql # openssl genrsa -out ca-key.pem 2048 # openssl req -new -x509 -nodes -days 1000 -key ca-key.pem -out ca-cert.pem # openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem -out server-req.pem # openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -out server-cert.pem -set_serial 01 # cd /etc/ # cp -p my.cnf my.cnf.`date +%Y%m%d` # vim my.cnf --- [mysqld] ssl-ca=/etc/pki/tls/mysql/ca-cert.pem ssl-cert=/etc/pki/tls/mysql/server-cert.pem ssl-key=/etc/pki/tls/mysql/server-key.pem --- # service mysqld restart <--reloadでは反映されない # mysql -u root -p mysql> show variables like '%ssl%' | Variable_name | Value | +---------------+--------------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /etc/mysql-ssl/ca-cert.pem | | ssl_capath | | | ssl_cert | /etc/mysql-ssl/server-cert.pem | | ssl_cipher | | | ssl_key | /etc/mysql-ssl/server-key.pem | ※have_sslがYESになっていないとSSL証明書と鍵で複合できていないことになる。/var/log/mysql.logなどを参照 mysql> grant all privileges on *.* to ユーザー@localhost identified by 'パスワード' require ssl; mysql> flush privileges; # mysql -u ユーザー -p --ssl-ca=/etc/pki/tls/mysql/ca-cert.pem -h 127.0.0.1 ※-h 127,0.0.1はテストで指定する。127.0.0.1を指定しないとtcpdumpでキャプチャのチェックできない mysql> show status like 'Ssl_cipher'; Ssl_cipher | DHE-RSA-AES256-SHA| ※上記valueが表示されていればOK パケットキャプチャ†別シェルを起動してパケットを確認する。パケットにSQL文が表示されていなければOK。また、なにも表示されない場合はNICの指定に誤りがあるか、mysqlコマンドで-h 127.0.0.1を指定していない可能性がある。 # tcpdump -nxX port 3306 参考URL† |