MySQL

パターン1:SSL(自己証明書)にて暗号化する

説明

MySQLサーバーへローカルIPアドレス経由ではなく、インターネット経由でアクセスしたい場合、そのまま3306ポートに接続すると盗聴された場合にSQL文が平文でで表示されます。
SQL文を暗号化するにはSSHでトンネリングする以外にSSL証明書を発行して、使用する方法があります。

手順

※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

http://inokara.hateblo.jp/entry/2013/04/29/023037


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-01-13 (水) 15:09:57 (1162d)