さくらインターネットのVPSへ構築したMySQLにSSL接続する方法についての解説です。
手順
まず、MySQLのSSL設定が、まだ設定されていないことを確認します。
have_opensslとhave_sslがDISABLEDになっていれば、SSLは未設定状態になります。
mysql show variables like '%ssl%'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_openssl | DISABLED | | have_ssl | DISABLED | | ssl_ca | | | ssl_capath | | | ssl_cert | | | ssl_cipher | | | ssl_key | | +---------------+----------+
MySQL用の各キーの保存先ディレクトリを作成します。
mkdir /etc/mysql-ssl cd /etc/mysql-ssl||< OPENSSLコマンドを使って、キーを作成していきます。 >|| openssl genrsa 2048 > ca-key.pem openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca-cert.pem openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem openssl rsa -in server-key.pem -out server-key.pem openssl x509 -req -in server-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
MySQLの設定ファイル(/etc/my.cnf)の「mysqld」欄内にSSLキーの保存先を記述します。
[mysqld] ssl-ca=/etc/mysql-ssl/ca-cert.pem ssl-cert=/etc/mysql-ssl/server-cert.pem ssl-key=/etc/mysql-ssl/server-key.pem
MySQLを再起動すれば、設定完了です。
/etc/init.d/mysqld restart
SSL接続を必須にする場合は、次のように設定します。
GRANT ALL PRIVILEGES ON *.* TO 'ユーザー名' IDENTIFIED BY 'パスワード' REQUIRE SSL; FLUSH PRIVILEGES;
ログインの際は、次のようにします。
mysql -u ユーザー名 --ssl-ca=/etc/mysql-ssl/ca-cert.pem -p
再び、SSL設定を表示し、have_opensslとhave_sslがYESになっていることを確認します。
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 | +---------------+--------------------------------+
TCPDUMPコマンドを使って、通信内容が暗号化されているかチェックできます。
tcpdump -nxX -s 2000 port 3306
以上、さくらインターネットのVPSへ構築したMySQLへSSL接続する方法についてでした。