開発運用

MySQL SSL/TLS 設定ガイド

MySQLでのSSL/TLS通信の設定は、データベースとクライアント間で安全にデータをやり取りするための重要なプロセスです。SSL/TLSを使用することで、データの盗聴や改ざんを防ぎ、セキュアな接続を提供できます。本記事では、Ubuntu 16.04でMySQLサーバーとクライアント間でSSL/TLS暗号化を設定する方法について、完全かつ包括的に解説します。

1. 事前準備

MySQLでSSL/TLSを有効にする前に、必要なツールや証明書を準備する必要があります。Ubuntu 16.04には、MySQLのインストールとともに必要なツールが含まれていますが、SSL証明書を生成するためには openssl を使用します。

まずは、openssl がインストールされていることを確認します。

bash
sudo 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サーバー用の証明書を生成します。

bash
openssl 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 クライアント証明書の生成

次に、クライアント用の証明書を生成します。

bash
openssl 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の設定ファイルをエディタで開きます。

bash
sudo 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サーバーを再起動して設定を反映させます。

bash
sudo systemctl restart mysql

5. クライアント側の設定

クライアントがSSL/TLS接続を使用できるようにするために、MySQLクライアントの設定も行います。

5.1 クライアント証明書の配置

クライアント用の証明書(client-cert.pem)と秘密鍵(client-key.pem)をクライアントマシンに配置し、MySQLクライアントから接続できるようにします。例えば、/etc/ssl/certs/ フォルダに配置します。

5.2 クライアント設定の実行

MySQLクライアントを使用してSSL接続を行うためには、以下のようにコマンドを実行します。

bash
mysql -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に接続後、以下のコマンドを実行します。

sql
SHOW 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接続を利用することができます。

Back to top button