Назад | Перейти на главную страницу

Включение SSL в MySQL при использовании Windows в качестве сервера и клиента

Я хотел включить 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):

  1. Создайте папку для наших сертификатов:

mkdir C:\mysqlCerts

  1. Настройте переменную среды для конфигурации OpenSSL (потому что, к сожалению, он не настроен по умолчанию в сборках Windows, на момент написания):

set OPENSSL_CONF=c:\OpenSSL-Win64\bin\openssl.cfg

  1. Создайте сертификаты CA (следующие 2 команды создают 2 файла: ca-cert.pem и ca-key.pem):

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"

  1. Создайте сертификаты сервера (следующие две команды создают 3 файла: server-cert.pem, server-key.pem и server-req.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"

  1. Создайте клиентские сертификаты (следующие две команды создают 3 файла: client-cert.pem, client-key.pem и client-req.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"

  1. Обновите файл конфигурации MySQL (в Windows он называется 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, проверьте документацию здесь.