MySQLでのSSL/TLS通信の設定は、データベースとクライアント間で安全にデータをやり取りするための重要なプロセスです。SSL/TLSを使用することで、データの盗聴や改ざんを防ぎ、セキュアな接続を提供できます。本記事では、Ubuntu 16.04でMySQLサーバーとクライアント間でSSL/TLS暗号化を設定する方法について、完全かつ包括的に解説します。
1. 事前準備
MySQLでSSL/TLSを有効にする前に、必要なツールや証明書を準備する必要があります。Ubuntu 16.04には、MySQLのインストールとともに必要なツールが含まれていますが、SSL証明書を生成するためには openssl
を使用します。
まずは、openssl
がインストールされていることを確認します。
bashsudo apt-get update sudo apt-get install openssl
次に、証明書を生成するために、MySQLサーバー用とクライアント用の証明書を作成します。
2. SSL証明書の生成
SSL証明書を生成するために、以下の手順に従って進めていきます。証明書は3つのファイルで構成されます:
- サーバー証明書 (server-cert.pem)
- サーバーの秘密鍵 (server-key.pem)
- クライアント証明書 (client-cert.pem)
2.1 サーバー証明書と秘密鍵の生成
まず、MySQLサーバー用の証明書を生成します。
bashopenssl genpkey -algorithm RSA -out server-key.pem
openssl req -new -key server-key.pem -out server-csr.pem
openssl x509 -req -in server-csr.pem -signkey server-key.pem -out server-cert.pem
このコマンドで、server-key.pem
(サーバーの秘密鍵)、server-cert.pem
(サーバーの証明書)、server-csr.pem
(証明書署名要求)が生成されます。
2.2 クライアント証明書の生成
次に、クライアント用の証明書を生成します。
bashopenssl genpkey -algorithm RSA -out client-key.pem
openssl req -new -key client-key.pem -out client-csr.pem
openssl x509 -req -in client-csr.pem -signkey client-key.pem -out client-cert.pem
これで、client-key.pem
(クライアントの秘密鍵)、client-cert.pem
(クライアントの証明書)が生成されます。
3. MySQLの設定ファイルの変更
MySQLサーバーにSSL/TLSを使用させるためには、MySQLの設定ファイルである my.cnf
を編集する必要があります。
3.1 設定ファイルを開く
MySQLの設定ファイルをエディタで開きます。
bashsudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
3.2 SSL設定を追加
設定ファイル内で、以下のSSL関連の設定を追加または変更します。
ini[mysqld]
ssl-ca=/etc/ssl/certs/server-cert.pem
ssl-cert=/etc/ssl/certs/server-cert.pem
ssl-key=/etc/ssl/private/server-key.pem
これにより、MySQLサーバーがSSL/TLS通信を使用するようになります。証明書のパスは、生成した証明書の実際のパスに合わせて変更してください。
4. MySQLサーバーの再起動
設定ファイルを変更した後、MySQLサーバーを再起動して設定を反映させます。
bashsudo systemctl restart mysql
5. クライアント側の設定
クライアントがSSL/TLS接続を使用できるようにするために、MySQLクライアントの設定も行います。
5.1 クライアント証明書の配置
クライアント用の証明書(client-cert.pem
)と秘密鍵(client-key.pem
)をクライアントマシンに配置し、MySQLクライアントから接続できるようにします。例えば、/etc/ssl/certs/
フォルダに配置します。
5.2 クライアント設定の実行
MySQLクライアントを使用してSSL接続を行うためには、以下のようにコマンドを実行します。
bashmysql -h
-u <ユーザー名> -p --ssl-ca=/etc/ssl/certs/server-cert.pem --ssl-cert=/etc/ssl/certs/client-cert.pem --ssl-key=/etc/ssl/private/client-key.pem
このコマンドでは、クライアント証明書と秘密鍵を指定し、サーバー証明書を確認してSSL接続を確立します。
6. SSL接続の確認
SSL接続が正常に確立されたかどうかを確認するためには、MySQLに接続後、以下のコマンドを実行します。
sqlSHOW VARIABLES LIKE '%ssl%';
このコマンドにより、SSL接続に関する情報が表示されます。以下のような結果が表示されれば、SSL接続が有効になっていることが確認できます。
perl+--------------------------+-------------------+
| Variable_name | Value |
+--------------------------+-------------------+
| have_openssl | YES |
| ssl_ca | /etc/ssl/certs/server-cert.pem |
| ssl_cert | /etc/ssl/certs/server-cert.pem |
| ssl_key | /etc/ssl/private/server-key.pem |
+--------------------------+-------------------+
7. セキュリティの強化
SSL/TLS接続を利用することでセキュリティは向上しますが、さらに強化するための方法もあります。
7.1 SSL証明書の有効期限の管理
証明書の有効期限が切れる前に、新しい証明書を再生成して、適切に更新することが重要です。証明書を定期的に更新することで、セキュリティを維持できます。
7.2 暗号化設定の強化
より強力な暗号化を使用するために、設定ファイルで暗号化アルゴリズムを指定することができます。例えば、以下のように設定します。
ini[mysqld]
ssl-cipher=ECDHE-RSA-AES128-GCM-SHA256
これにより、通信の暗号化強度を向上させることができます。
結論
MySQLサーバーでSSL/TLS暗号化を設定することで、通信のセキュリティが強化され、データの保護が向上します。この記事で紹介した手順に従って、証明書の生成からMySQLの設定、クライアントとの接続確認までを実行することで、安心してSSL/TLS接続を利用することができます。