MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

LinuxでMySQLサーバーとクライアント間のSSL接続を設定する方法

このチュートリアルでは、SSLによる暗号化を利用してMySQLサーバーへの安全な接続を確立し、データベース内のデータを第三者による盗聴や盗難から守る方法を解説します。SSL証明書による認証は、なりすまし(フィッシング)攻撃への対策としても有効です。サーバー側でSSLを有効化する手順から、クライアント側の設定まで、順を追って説明します。

SSLサポートの有効化状況を確認する

まずMySQLサーバーに接続し、SSLのステータスを確認しましょう。

# mysql -u root -p
mysql> show variables like '%ssl%';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_key       |          |
+---------------+----------+
7 rows in set (0.00 sec)
mysql> \q
Bye

have_ssl が「DISABLED」と表示されている場合、SSLはまだ有効化されていません。続いて証明書を作成し、設定を追加していきます。

証明書を保存するディレクトリの作成

証明書ファイルを格納する専用ディレクトリを作成します。

# mkdir /etc/certificates
# cd /etc/certificates

CA証明書(認証局証明書)の生成

サーバー証明書やクライアント証明書に署名するためのCA証明書を、最初に生成しておきます。この手順を省略すると、後の署名処理で「ca-cert.pem を開けない」というエラーが発生するため注意してください。

# openssl genrsa 2048 > ca-key.pem
# openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

サーバー証明書の生成

秘密鍵と証明書署名要求(CSR)を作成し、CA証明書で署名します。国名や組織名などの入力を求められた場合は、環境に合わせて入力してください(Enterのみでスキップも可能です)。

# openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem
# openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd

クライアント証明書の生成

同じ手順で、クライアント用の証明書も生成します。

# openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
# openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
Signature ok

my.cnf に証明書の設定を追加する

生成した証明書をMySQLサーバーに認識させるため、my.cnf を編集して [mysqld] セクションに以下を追加します。

# vi /etc/my.cnf

[mysqld]
ssl-ca=/etc/certificates/ca-cert.pem
ssl-cert=/etc/certificates/server-cert.pem
ssl-key=/etc/certificates/server-key.pem

MySQLサーバーの再起動と証明書ステータスの確認

# service mysqld restart
# mysql -uroot -p
mysql> show variables like '%ssl%';
+---------------+-----------------------------------+
| Variable_name | Value                             |
+---------------+-----------------------------------+
| have_openssl  | YES                               |
| have_ssl      | YES                               |
| ssl_ca        | /etc/certificates/ca-cert.pem     |
| ssl_capath    |                                   |
| ssl_cert      | /etc/certificates/server-cert.pem |
| ssl_cipher    |                                   |
| ssl_key       | /etc/certificates/server-key.pem  |
+---------------+-----------------------------------+
7 rows in set (0.00 sec)

have_ssl が「YES」になり、各証明書のパスが正しく表示されていれば、サーバー側のSSL設定は完了です。

SSL接続必須のユーザーを作成する

REQUIRE SSL を指定してユーザーを作成すると、そのユーザーはSSLで暗号化された接続からのみログインできるようになります。

mysql> GRANT ALL PRIVILEGES ON *.* TO 'ssl_user'@'%' IDENTIFIED BY 'password' REQUIRE SSL;
mysql> FLUSH PRIVILEGES;

MySQLクライアント側のSSL設定

サーバー側で作成したクライアント証明書とCA証明書を、scpコマンドでクライアントマシンへコピーします。

# scp /etc/certificates/ca-cert.pem root@192.168.87.158:/etc/certificates
# scp /etc/certificates/client-cert.pem root@192.168.87.158:/etc/certificates
# scp /etc/certificates/client-key.pem root@192.168.87.158:/etc/certificates

ファイルの転送が完了したら、クライアントマシンからSSL証明書を指定してMySQLサーバー(192.168.87.156)に接続します。

# mysql --ssl-ca=ca-cert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -h 192.168.87.156 -u ssl_user -p
...
mysql> status
--------------
...
SSL: Cipher in use is DHE-RSA-AES256-SHA
...
--------------

status の出力に「SSL: Cipher in use is DHE-RSA-AES256-SHA」と表示されていれば、SSL暗号化された接続が確立できています。

恒久的なSSL接続の設定

毎回コマンドラインオプションを指定しなくても済むよう、クライアント側の my.cnf に [client] セクションを追加しておきます。

# vi /etc/my.cnf

[client]
ssl-ca=/etc/certificates/ca-cert.pem
ssl-cert=/etc/certificates/client-cert.pem
ssl-key=/etc/certificates/client-key.pem

以上の設定により、クライアントからMySQLサーバーへ接続する際に常にSSL暗号化が使用されるようになります。ネットワーク上を流れるデータの盗聴や改ざんを防ぎ、ハッカーからの攻撃にも強い、安全なデータベース運用が実現できます。

  1. Windows 10でTFTPサーバーをセットアップ・構成する方法を徹底解説

    TFTPサーバーとは?TFTPサーバーは、ネットワークで接続されたシステム間でファイルを転送するために使用されるツールです。TFTP(Trivial File Transfer Protocol:簡易ファイル転送プロトコル)は、リモートシステムとの間でファイルを送受信するためのインターネットソフトウェアユーティリティです。プロトコル自体は非常にシンプルな仕組みで、転送中のファイルに対するセキュリティ機能は限られています。かつてWindowsには、ネットワーク経由で手軽にファイル共有ができるホームグループ機能がありました。しかし、この機能はWindows 10のv1803アップデートで廃止された

  2. Windows 10でFTPサーバーを構築・管理する方法【初心者向け完全ガイド】

    Windows 10にFTP(File Transfer Protocol)サーバーを構築すると、どこからでも自分のPCにファイルをアップロード・ダウンロードできるようになります。FTPサーバーは、いわば「自分が完全にコントロールできるプライベートクラウド」です。通信速度は契約しているインターネット回線に依存し、月間の転送量制限もありません。また、ファイルのサイズや種類による制限もないため、1KBの小さなバックアップファイルでも、1TBもの大容量データでも問題なく扱えます。アカウント数にも上限がないため、友人や同僚、家族と一緒にファイルを保存・共有することも可能です。 この記事では、Windo