Я хотел включить SSL для подключений к моему серверу MySQL, который я установил на машине с Windows, поэтому я googleddd "использовать ssl mysql windows".
Первый результат это простое и понятное руководство.
Судя по всему, это руководство мне как раз и было нужно. Тем не мение:
Поэтому я думаю, что такие руководства лучше разместить на таком сайте, как serverfault.com, где каждый может позже предложить изменения к ответам.
В таком случае я готов принять ответ на этот вопрос, который представляет собой всего лишь копирование + вставку из этого блога, чтобы позже я мог предложить его изменения. И поэтому в следующий раз, когда мне понадобится настроить SSL на моем сервере MySQL, я не найду тех же причуд, и у меня есть прямое и полное руководство, которому нужно следовать. И, надеюсь, позже Google получит более высокий рейтинг. Спасибо
Обычно двоичные файлы для сервера MySQL для 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 |
| ... | ... |
Итак, SSL доступен, но на данный момент ОТКЛЮЧЕН (если бы он имел значение «НЕТ», значит, SSL не был включен для наших двоичных файлов, нам нужно было бы искать новые). Наша цель - сначала настроить MySQL так, чтобы в этих значениях отображалось «ДА».
Вы также можете узнать, используется ли SSL для текущего соединения, выполнив status
запрос:
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-шаговый процесс, который нужно запускать из командной строки (cmd
) из папки, в которую мы установили OpenSSL (например, C:\OpenSSL-Win64\bin
):
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
не my.cnf
как в Linux, а не my-default.ini
поскольку последний является шаблоном), который обычно находится в C:\ProgramData\MySQL\MySQL Server 5.7\
(примечание: ProgramData - это скрытая папка), чтобы включить ее в [mysqld]
раздел:Примечание: если у вас есть \s
на вашем пути вам нужно будет заменить его на \\s
потому что mysqld заменит \ s символом пробела, который нарушит путь к вашему ключу. Дополнительная обратная косая черта ускользает от исходной обратной косой черты, оставляя ваш путь нетронутым.
ssl-ca = "C:\mysqlCerts\ca-cert.pem"
ssl-cert = "C:\mysqlCerts\\server-cert.pem"
ssl-key = "C:\mysqlCerts\\server-key.pem"
и перезапустите службу / сервер mysql.
Теперь давайте снова подключимся через нашего обычного пользователя (не через ssluser
) с участием mysql -uroot -p
и проверьте наши 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-режим флаг:
mysql.exe -ussluser -p --ssl-mode=REQUIRED
Если он подключится, мы закончили.
(Но, чтобы дважды проверить, вы можете попробовать подключиться без SSL, чтобы увидеть, отклоняет ли он ваше соединение таким образом :)
mysql.exe -ussluser -p --ssl=0
Теперь вам нужно настроить приложение для использования его коннектора через SSL. Например, если вы используете .NET Connector, проверьте документацию здесь.