MariaDB でセキュア接続。

 ここのところ MariaDB で セキュアな接続を使おうと一生懸命やっていた。はじめる前に, SHOW VARIABLES LIKE 'have_ssl'; とやったら下記の結果になった:

+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_ssl      | DISABLED |
+---------------+----------+

 DISABLED というのはコンパイル時に TLS サポートはされているが,現時点で有効ではないよということなので,ちゃんと設定すればうちの SQL サーバでセキュアな接続が出来るわけだ。

 うちの Let’s Encrypt の証明書が RSA 形式のままなら,それを MariaDB に流用も可能だったと思うのだが,うちのは RSA 形式じゃないし MariaDB のほうは RSA しか受け付けないみたいなので,それ用に自前証明書を作った。初めはよく書いてある下記のコマンドで作ったんだけど,これだと phpMyAdmin が上手く受容してくれなかった。 MariaDB と WordPress では特に問題ないみたいだったんだけどね。

>openssl genrsa 2048 > cakey.pem
>openssl req -new -x509 -nodes -days 3650 -key cakey.pem -out my_ca.crt
>openssl req -newkey rsa:2048 -days 3650 -nodes -keyout MySQL.key -out MySQL.csr
>openssl rsa -in MySQL.key -out MySQL.key
>openssl x509 -req -in MySQL.csr -days 3650 -CA my_ca.crt -CAkey cakey.pem -set_serial 01 -out MySQL.crt

 しょうがないなあということで,下記の手順で作り直した。最終的に Common Name は localhost にした。これも違うと phpMyAdmin でエラーが出るんだよね。多分, MariaDB のユーザが @localhostだから,このあたりに引っかかるんだろう。

>copy index.txt+
>echo 01 > serial
>openssl req -new -keyout private\cakey.pem -out careq.pem
>openssl ca -selfsign -in careq.pem -extensions v3_ca -out cacert.pem
>copy cacert.pem my_ca.crt
>openssl req -new -keyout MySQL.key -out MySQL.csr
>openssl ca -in MySQL.csr -out MySQL.crt
>copy MySQL.key cp_MySQL.key
>openssl rsa <cp_MySQL.key> MySQL.key
>openssl rsa -in MySQL.key -out MySQL.key

 openssl rsa -in MySQL.key -out MySQL.key はキーの PEM header を書き換えている。このせいらしい。だいぶ前の報告なのにまだ直ってない。

 my.ini の [mysqld] に以下の 3 行を付け加えた。 MariaDB を再起動。

ssl_ca = /path/to/my_ca.crt
ssl_cert = /path/to/MySQL.crt
ssl_key = /path/to/MySQL.key

 SHOW VARIABLES LIKE '%ssl%'; の結果は下記の通り:

+---------------------+--------------------+
| Variable_name       | Value              |
+---------------------+--------------------+
| have_openssl        | NO                 |
| have_ssl            | YES                |
| ssl_ca              | /path/to/my_ca.crt |
| ssl_capath          |                    |
| ssl_cert            | /path/to/MySQL.crt  |
| ssl_cipher          |                    |
| ssl_crl             |                    |
| ssl_crlpath         |                    |
| ssl_key             | /path/to/MySQL.key  |
| version_ssl_library | YaSSL 2.4.2        |
+---------------------+--------------------+

 windows 版以外の MariaDB だと have_openssl も ‘yes’ になるはずだ。詳しい話は,SSL/TLS System Variables をどうぞ。

 次の記事では,セキュア接続になった SQL サーバにつなぐには phpMyAdmin と WordPress に何の設定がいるのかということを書こうと思う。

 書き忘れた。各バージョンは以下の通り。
 MariaDB 10.2.9 win 32-bit
 phpMyAdmin 4.7.4
 WordPress 4.8.2

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください