WindowsマシンにインストールしたMySQLサーバーへの接続でSSLを有効にしたかったので、「use ssl mysql windows」とグーグル検索しました。
最初の結果は このシンプルで簡単なガイド です。
見た目からは、ちょうど欲しかったガイドのようです。しかしながら:
したがって、このようなガイドは、serverfault.comのようなサイトに配置した方がよいと思います。このサイトでは、誰もが回答の変更を後で提案できます。
私は、この質問に対する回答を、このブログからのコピーと貼り付けだけで受け入れることをいとわないので、後で変更を提案できます。そして、次回、MySQLサーバーでSSLをセットアップする必要があるとき、同じ癖が見つからず、従うべき簡単で完全なガイドがあります。そして、うまくいけば、これは後でグーグルによってより高くランク付けされます。ありがとう
通常、MySQL WebサイトからダウンロードできるWindows用MySQLサーバーのバイナリは、SSLサポート付きでコンパイルされています。これが事実であることを再確認するには、mysql -uroot -p
(Windowsではmysql.exe
はC:\Program Files\MySQL\MySQL Server 5.7\bin
にあります)を介してインスタンスに接続し、次を実行します。
mysql> show global variables like '%ssl%';
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| ... | ... |
OK、SSLは利用可能ですが、現時点では無効になっています(値に「NO」が含まれている場合、バイナリに対してSSLが有効になっていないため、新しいものを探す必要があります)。私たちの目的は、最初にMySQLを設定して、これらの値に「YES」が表示されるようにすることです。
status
クエリを発行して、現在の接続にSSLが使用されているかどうかを確認することもできます。
mysql> status
--------------
mysql Ver 14.14 Distrib 5.7.12, for Win64 (x86_64)
Connection id: 551
Current database:
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 5.7.12-log MySQL Community Server (GPL)
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: utf8
Db characterset: utf8
Client characterset: cp850
Conn. characterset: cp850
TCP port: 3306
Uptime: 13 days 22 hours 23 min 24 sec
(これはサーバーでSSLを有効にするときに便利になりますが、SSLが特定のユーザー/接続に使用されていることを確認したい場合もあります。)
このmysqlコンソール内にいるので、SSLモードを使用するユーザーを作成しましょう(ユーザー名はssluser
、パスワードはsslpassword
):
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ssluser'@'localhost' IDENTIFIED BY 'sslpassword' REQUIRE SSL;
mysql> FLUSH PRIVILEGES;
次のクエリを発行することで、SSLを使用するように強制する(接続しない場合は接続を許可しない)ために、既存のユーザーに対しても同等のことができます。
mysql> UPDATE mysql.user SET ssl_type = 'ANY' WHERE user = 'someUser';
mysql> FLUSH PRIVILEGES;
(そして、SSLなしで接続できるように戻すには:)
mysql> UPDATE mysql.user SET ssl_type = '' WHERE user = 'someUser';
mysql> FLUSH PRIVILEGES;
次に、マシンにOpenSSLをインストール/使用可能にする必要があります。多くの人はすでにこれを持っていますが、確かにほとんどのLinuxはとにかくです。 Windowsの場合は、 こちら からダウンロードできます。
これで説明は終わりです。基本的に6つのステップからなるプロセスを見ていきます。これは、OpenSSLをインストールしたフォルダー(例:C:\OpenSSL-Win64\bin
)のコマンドライン(cmd
)から実行する必要があります。 ):
mkdir C:\mysqlCerts
set OPENSSL_CONF=c:\OpenSSL-Win64\bin\openssl.cfg
openssl genrsa 2048 > "C:\mysqlCerts\ca-key.pem"
openssl req -new -x509 -nodes -days 3600 -key "C:\mysqlCerts\ca-key.pem" > "C:\mysqlCerts\ca-cert.pem"
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout "C:\mysqlCerts\server-key.pem" > "C:\mysqlCerts\server-req.pem"
openssl x509 -req -in "C:\mysqlCerts\server-req.pem" -days 3600 -CA "C:\mysqlCerts\ca-cert.pem" -CAkey "C:\mysqlCerts\ca-key.pem" -set_serial 01 > "C:\mysqlCerts\server-cert.pem"
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout "C:\mysqlCerts\client-key.pem" > "C:\mysqlCerts\client-req.pem"
openssl x509 -req -in "C:\mysqlCerts\client-req.pem" -days 3600 -CA "C:\mysqlCerts\ca-cert.pem" -CAkey "C:\mysqlCerts\ca-key.pem" -set_serial 01 > "C:\mysqlCerts\client-cert.pem"
my.ini
と呼ばれ、Linuxのようにmy.cnf
ではなく、後者はテンプレートであるためmy-default.ini
ではありません)。これは通常C:\ProgramData\MySQL\MySQL Server 5.7\
にあります(注:ProgramDataは隠しフォルダーです)、これを[mysqld]
セクションに含めます。注:パスに\s
が含まれている場合、mysqldが\ sを空白文字に置き換えて空白文字を壊すため、パスを\\s
に置き換える必要があります。キーへのパス。余分なバックスラッシュは元のバックスラッシュをエスケープして、パスをそのままにします。
ssl-ca = "C:\mysqlCerts\ca-cert.pem"
ssl-cert = "C:\mysqlCerts\\server-cert.pem"
ssl-key = "C:\mysqlCerts\\server-key.pem"
mysqlサービス/サーバーを再起動します。
ここで、mysql -uroot -p
を使用して、通常のユーザー(ssluser
ではなく)を介して再度接続し、ssl変数を確認します。
mysql> show global variables like '%ssl%';
+---------------+----------------------------------------+
| Variable_name | Value |
+---------------+----------------------------------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | C:\mysqlCerts\ca-cert.pem |
| ssl_capath | |
| ssl_cert | C:\mysqlCerts\server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | C:\mysqlCerts\server-key.pem |
+---------------+----------------------------------------+
上記のようなものがなければ、うまくいきません。証明書/キーを作成するときにパスフレーズを割り当てたのでしょうか?その場合、MySQLはパスフレーズなしでそれらを使用できません。その後、次のopensslコマンドを発行して、それを削除できます。
openssl rsa -in "C:\mysqlCerts\server-key.pem" -out "C:\mysqlCerts\server-key-ppless.pem"
次に、my.ini
を再度変更して、この新しい-ppless.pem
接尾辞付きファイルを指すようにします。もう一度mysqlを再起動して接続し、have_ssl
がYES
であることを確認します。それは...ですか?ステータスを表示して再確認します。
mysql> status
--------------
mysql.exe Ver 14.14 Distrib 5.7.12, for Win64 (x86_64)
Connection id: 2
Current database:
Current user: root@localhost
SSL: Cipher in use is DHE-RSA-AES256-SHA
Using delimiter: ;
Server version: 5.7.12-log MySQL Community Server (GPL)
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: utf8
Db characterset: utf8
Client characterset: cp850
Conn. characterset: cp850
TCP port: 3306
Uptime: 46 sec
これでSSLに何かができました!新しいssluser
と接続してみましょう。次に -ssl-mode フラグを使用します。
mysql.exe -ussluser -p --ssl-mode=REQUIRED
接続されれば完了です。
(ただし、再確認するには、SSLを使用せずに接続を試みて、接続が拒否されるかどうかを確認することができます:)
mysql.exe -ussluser -p --ssl=0
次に、SSL経由でコネクタを使用するようにアプリを構成する必要があります。たとえば、 。NETコネクタを使用している場合は、こちらのドキュメントを確認してください 。