moshimore Knowledge

アプリ開発・紹介とメモ書き、日々の日記。

さくらインターネットのVPSへ構築したMySQLへSSL接続する方法について

f:id:moshimore:20180710165922j:plain
さくらインターネットの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 &gt; 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接続する方法についてでした。