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

Настроен MySQL для SSL, но SSL все еще ОТКЛЮЧЕН ..!

Я настроил SSL для MySQL, используя следующий сценарий.

#!/bin/bash
#
mkdir -p /root/abc/ssl_certs
cd /root/abc/ssl_certs
#
echo "--> 1. Create CA cert, private key"
openssl genrsa 2048 > ca-key.pem

echo "--> 2. Create CA cert, certificate"
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

echo "--> 3. Create Server certificate, key"
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem

echo "--> 4. Create Server certificate, cert"
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
echo ""
echo 
echo ""

echo "--> 5. Create client certificate, key. Use DIFFERENT common name then server!!!!"
echo ""
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
echo "6. Create client certificate, cert"
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
exit 0

Были созданы следующие файлы:

ca-key.pem             ca-cert.pem
server-req.pem         server-key.pem       server-cert.pem
client-req.pem         client-key.pem       client-cert.pem

Затем я объединил server-cert.pem и client-cert.pem в ca.pem (я прочитал в сообщении об этом ..)

Я создал пользователя ssl в MySQL:

GRANT ALL ON  *.* to sslsuer@hostname IDENTIFIED BY 'pwd' REQUIRE SSL;

Затем я добавил следующее в my.cnf

[mysqld]
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

После перезапуска сервера я подключился к mysql, но SSL все еще не использовался :(

mysql -u ssluser -p

SSL:                    Not in use

Даже параметр have_ssl по-прежнему показывал отключение .. :(

mysql> show variables like '%ssl%';
+---------------+---------------------------------------------+
| Variable_name | Value                                       |
+---------------+---------------------------------------------+
| have_openssl  | DISABLED                                    |
| have_ssl      | DISABLED                                    |
| ssl_ca        | /root/abc/ssl_certs/ca.pem          |
| ssl_capath    |                                             |
| ssl_cert      | /root/abc/ssl_certs/server-cert.pem |
| ssl_cipher    |                                             |
| ssl_key       | /root/abc/ssl_certs/server-key.pem  |
+---------------+---------------------------------------------+

Я что-то пропустил, или что случилось?

Будем очень признательны за подробные ответы с пропущенными шагами.

Смотрите решение здесь: https://askubuntu.com/questions/194074/enables-ssl-in-mysql

Вам необходимо преобразовать сертификаты в старый формат:

openssl rsa -in client-key.pem -out client-key.pem
openssl rsa -in server-key.pem -out server-key.pem

Попробуйте проверить это:

  • включить журнал вывода предупреждений MySQL и прочтите эти фактические записи журнала.
  • Проверьте разрешения файловой системы, чтобы позволить пользователю, от имени которого работает MySQL (mysql?) читать файлы. В /root Не думаю, что по умолчанию.
  • Apparmor или SELinux мешает MySQL читать сертификаты и ключи?
  • Вы можете столкнуться с неприятной ошибкой недавней несовместимости OpenSSL и MySQL. Мне не удалось сгенерировать ключи в Ubuntu 12.04, которые MySQL мог читать, тогда как те, которые я генерирую в Debian Squeeze, работают нормально.

У меня была эта проблема, и это помогло сменить владельца на файлы .pem:

chown mysql.mysql /var/lib/mysql/*.pem  (or in your case /root/abc/ssl_certs/*.pem)

(От Крейга Райта - https://askubuntu.com/questions/194074/enables-ssl-in-mysql)

В Ubuntu вы можете проверить, apparmor блокирует доступ к вашим файлам сертификатов, см. руководство.

Затем вы должны проверить права / права собственности на файл и добавить необходимые права в /etc/apparmor.d/usr.sbin.mysqld. Посмотри это нить.

Добавьте "ssl" в [mysqld] раздел в my.cnf файл как

ssl
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

а затем перезапустите mysql и проверьте еще раз. Это сработает.

Я считаю, что эта проблема связана с тем, что вы неправильно указали пути к файлам для сертификата CA, ключа сервера и сертификата сервера. Он должен быть в следующем формате ...

ssl-ca=path/to/repo/mysql-directory/path/to/pem/cacert.pem
ssl-cert=path/to/repo/mysql-directory/path/to/pem/server-cert.pem
ssl-key=path/to/repo/mysql-directory/path/to/pem/server-key.pem

то есть вам нужен ПОЛНЫЙ ПУТЬ к файлам сертификатов и ключей в папке установки mysql, а не относительный путь '/ root /'.

Вот пример из моей установки:

mysql> show variables like '%ssl%';
+---------------+----------------------------------------------------------+
| Variable_name | Value                                                    |
+---------------+----------------------------------------------------------+
| have_openssl  | YES                                                      |
| have_ssl      | YES                                                      |
| ssl_ca        | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/ca.pem         |
| ssl_capath    |                                                          |
| ssl_cert      | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-cert.pem|
| ssl_cipher    |                                                          |
| ssl_key       | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-key.pem |
+---------------+----------------------------------------------------------+

Дополнительную информацию см. По следующей ссылке. https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-ssl.html