MySQL サーバに SSL 接続
分散配置した MySQL サーバに SSL 接続したい、という需要は当然ある。というわけで、プライベートな認証局と証明書 (自己署名でも可) を使ってMySQL へセキュアに接続する手軽な方法について。
1) 認証局と証明書の作成
see http://www.tc.umn.edu/~brams006/selfsign.html
revoke とかしないんなら、CA.sh を動かしてテンポラリファイルをゴリゴリ作る必要はない。
これは apache の証明書を作る場合も同じなんで、覚えておいて損はない。
サーバ証明書の秘密鍵生成時に -des3 を外さないと毎回パスワードを... ってのはお約束。
自己署名証明書なら CA とサーバ証明書の秘密鍵を同じにするとよい。
2) mysqld の起動
mysqld の側で必要なファイルはサーバ証明書と、その秘密鍵。my.cnf に以下のように設定すればいい。
[mysqld] ... ssl_cert=/usr/local/mysql51/etc/server.crt ssl_key=/usr/local/mysql51/etc/server.key
3) クライアント側
必要なファイルはCAの証明書だけ。こんな感じで接続。
$ mysql -u root --host db.example.com --ssl --ssl-ca=ca.crt --ssl-verify-server-crt
ホスト名のチェックが不要なら、--ssl-verify-server-crt オプションは不要。省略した場合、ca.crt で署名されたサーバ証明書をすべて許可するようになる。
以上が最低限。応用編としては、
といったあたりがある。詳しくは http://dev.mysql.com/doc/refman/5.1/en/secure-using-ssl.html 参照。