ここのところ 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 privatecakey.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
「MariaDB でセキュア接続。」への2件の返信
[…] […]
ピンバック、ありがとうございます。