Настроил MySQL для SSL, но SSL по-прежнему отключен ..!

9

Я настроил 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  |
+---------------+---------------------------------------------+

Я пропустил какой-либо шаг, или что не так ..

Ответы с пропущенными шагами в деталях будут высоко оценены.

Солнечные лучи
источник
Какую версию OpenSSL вы используете? И, пожалуйста, включите журнал ошибок + предупреждения в MySQL. Если вы видите сообщение об ошибке «не удается прочитать закрытый ключ», возможно, эта ошибка каким-то образом поражена . Создание новых ключей + сертификаты в старой системе, использование их в недавнем MySQL решило проблему для меня.
gertvdijk
@gertvdijk Я использовал openssl-1.0.1c. Я проверяю логи на упомянутую ошибку.
Солнечные лучи
Прежде всего. Проверьте, поддерживает ли mysql ssl. mysql --ssl --helpТакже не забудьте перезапустить mysql после внесения этих изменений в my.cnf
Валентин Байрами
1
@ val0x00ff да MySQL поддерживает ssl, если значение have_ssl отключено.
Солнечные лучи
попробуйте mysql --ssl -u ssluser -pзаставить SSL на клиенте. после того, как это работает, можно определить, почему REQuIRE SSL не работает.
Йоханнес

Ответы:

6

Смотрите решение здесь: /ubuntu/194074/enabling-ssl-in-mysql

Вам нужно конвертировать сертификаты в старый формат:

openssl rsa -in client-key.pem -out client-key.pem
openssl rsa -in server-key.pem -out server-key.pem
Павел Бернштам
источник
3

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

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

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

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

Франк Дробнич
источник
2

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

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

(От Крейга Райта - /ubuntu/194074/enabling-ssl-in-mysql )

BTB
источник
Это решило проблему для меня.
Муравьед
0

Добавьте "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 и проверьте снова. Это будет работать.

Pratik
источник
0

Я полагаю, что эта проблема связана с тем, что вы не указали правильные пути к файлам для вашего 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

мистифицировать
источник
Его пути начинаются с /, что означает, что они полные пути, а не относительные пути. /root/домашняя папка для пользователя root в системе Unix
Бобпаул