Увімкнення SSL в MySQL


24

Я запускаю Ubuntu Server 12.04, і хочу включити підключення SSL до MySQL.

Я створив такі файли ключів / certs за допомогою OpenSSL:

  • ca-cert.pem
  • сервер-cert.pem
  • сервер-key.pem

Я зберігав їх у /etc/mysql, потім додав, додав наступні рядки до /etc/mysql/my.cnf:

ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

Далі я перезапустив сервер sudo service restart mysql.

Однак, схоже, це не дозволяє SSL. У межах сесії mysql:

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

Якісь ідеї, чого мені не вистачає? Спасибі


2
Перевірте цю дивовижну нитку .. Можливо, це може вам допомогти.
SirCharlo

Дякуємо за посилання SirCharlo, але проблема, яка розглядається в цій темі, схоже, не стосується моєї ситуації.
відвідувач93746

1
Що згадує @SirCharlo, це те, де ви хочете подивитися. Зокрема, частина Apparmor та пост №10 . Клавіші, які я створив на Debian Squeeze або старшій Ubuntu, працюють нормально - відродження в 12.04 робить його знову невдалим. Дивіться також журнали помилок MySQL.
gertvdijk

2
У мене було це те саме питання, і я витратив на нього години, але відповідь @ user262116 вирішив його. Я б радив прийняти цю відповідь, якщо вона допомогла б вам!
еліксинід

Відповіді:


33

Ubuntu 12.04 поставляється з OpenSSL 1.0.1, який має дещо інші за замовчуванням, ніж старіші версії OpenSSL 0.9.8.

Крім усього іншого, якщо ви використовуєте openssl req -newkey rsa:2048для створення ключа RSA, ви отримаєте ключ у форматі під назвою PKCS # 8 . Представлені у форматі PEM, ці клавіші мають більш загальний -----BEGIN PRIVATE KEY-----заголовок, який не говорить вам про тип клавіші (RSA, DSA, EC).

Раніше, з OpenSSL 0.9.8, ключі завжди були у форматі під назвою PKCS # 1 , який представлявся як PEM, мали заголовок -----BEGIN RSA PRIVATE KEY-----.

Через це ви не можете просто змінити заголовок і колонтитул з:

-----BEGIN PRIVATE KEY-----

до

-----BEGIN RSA PRIVATE KEY-----`

Це не те саме, і це не спрацює. Натомість вам потрібно перетворити ключ у старий формат за допомогою openssl rsa. Подобається це:

openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem

MySQL (v5.5.35) на Ubuntu 12.04 використовує реалізацію SSL під назвою yaSSL (v2.2.2). Очікується, що ключі будуть у форматі PKCS №1 і не підтримують формат PKCS # 8, використовуваний OpenSSL 1.0 та новішими. Якщо ви просто зміните заголовок і колонтитул, як це пропонують інші публікації в цій темі, MySQL / yaSSL не поскаржиться, але ви не зможете підключитися, а замість цього вийде така помилка:

ERROR 2026 (HY000): SSL connection error: protocol version mismatch

Ubuntu 14.04 поставляється з OpenSSL 1.0.1f та новими налаштуваннями. Крім усього іншого, він буде генерувати сертифікати з дайджестами SHA256 замість SHA1, які використовувались у попередніх версіях. До речі, версія yaSSL у комплекті з MySQL також не підтримує це.

Якщо ви генеруєте сертифікати для використання з MySQL, пам’ятайте, що переконайтеся, що ключі RSA перетворені у традиційний формат PEM PKCS №1, і що сертифікати використовують дайджести SHA1.

Ось приклад того, як можна створити власний сертифікат обслуговування, серверний сертифікат та клієнтський сертифікат.

# Generate a CA key and certificate with SHA1 digest
openssl genrsa 2048 > ca-key.pem
openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem

# Create server key and certficate with SHA1 digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -sha1 -req -in server-req.pem -days 730  -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
openssl rsa -in server-key.pem -out server-key.pem

# Create client key and certificate with SHA digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem > client-req.pem
openssl x509 -sha1 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
openssl rsa -in client-key.pem -out client-key.pem

1
Ця публікація врятувала мені день! Фантастичне пояснення та рішення.
generalopinion

Я отримав "ПОМИЛКА 2026 (HY000): Помилка підключення SSL: ASN: до дати в майбутньому"
Nitsan Baleli

На жаль, я все-таки отримав ERROR 2026 (HY000): SSL connection error: protocol version mismatchпомилки (використовуючи OpenSSL 1.0.1f). Я перейшов на OpenSSL 1.0.1e, і він працював з вищезазначеними інструкціями.
Jarrett

2
Ця відповідь дивовижна - я б нагородив величезною нагородою, якби міг. Прекрасне пояснення проблеми.
elixenide

Ще один голос, який слід додати до орди. Потоптали Інтернет, намагаючись знайти рішення, чому налаштований на MySQL документально налаштований просто не спрацював - нижня частина цього повідомлення повністю врятувала мені день.
Стів Чемберс

4

Це допомогло мені:

Заголовок і колонтитул файлу server-key.pem виглядали так:

-----BEGIN PRIVATE KEY-----
...
...
-----END PRIVATE KEY-----

Але для цього потрібно щось подібне:

-----BEGIN RSA PRIVATE KEY-----
...
...
-----END RSA PRIVATE KEY-----

Зверніть увагу на ПОЧАТКОВИЙ КЛЮЧ RSA

Для того, щоб побачити журнал:

sudo vim /var/log/mysql/error.log

Сподіваюсь, це допомагає.


У мене була схожа проблема в моєму Ubunbtu 12.04 з mysql 5.5.34, де файли pem усі читали, і все ж давали мені ту саму проблему. Але ця відповідь у поєднанні зі зміною власника зробила трюк.
Томмі Андерсен

Не додайте вручну "RSA" - це лише придушить помилку, але SSL не буде працювати (ви отримаєте ще одну помилку, " Помилка підключення SSL: невідповідність версії протоколу "). Перетворити з PKCS # 8 у формат PKCS # 1 замість цьогоopenssl rsa
rustyx

3

У мене були ті ж неприємності 12.04, але насправді спричинили проблеми.

Я знайшов рішення на Форумах Ubuntu , переміщуючи .pemфайли в /etc/mysqlйого вирішенні.

Ви також можете змінити конфігурацію apparmor у /etc/apparmor.d/usr.sbin.mysqld.


З цією проблемою у мене також був
Джонатан

це помилка друку? ви маєте на увазі "переміщення файлів pem до" замість "переміщення файлів pem у"? вибачте за те, що був таким педантом, але я трохи розгубився
knocte

1

Переконайтеся, що користувач, який запускає процес mysqld, прочитав доступ до ключів та файлів сертифікатів. Якщо ви запускаєте MySQL за допомогою облікового запису "mysql", ви:

/etc/mysql$ chown mysql:mysql *.pem
/etc/mysql$ ls -l *.pem
-rwxrwx--- 1 mysql mysql 1631 2013-09-16 14:27 ca-cert.pem
-rwxrwx--- 1 mysql mysql 1281 2013-09-16 14:27 server-cert.pem
-rwxrwx--- 1 mysql mysql 1679 2013-09-16 14:27 server-key.pem

В іншому випадку ви можете отримати в своєму журналі помилок таке:

SSL error: Unable to get certificate from '/etc/mysql/server-cert.pem'
130916 13:32:25 [Warning] Failed to setup SSL
130916 13:32:25 [Warning] SSL error: Unable to get certificate

Чудово. Але як це можна було зробити? Знайдіть час і поясніть далі, надаючи більше інформації :)
Lucio

Це в поєднанні з додаванням RSA до файлу server-key.pem зробив свою справу.
Томмі Андерсен

1

В Ubuntu 16.04, я побіг mysql_ssl_rsa_setup, міг бачити файли в шоу змінних , як в питанні, але have_sslі по- have_openssl, як і раніше DISABLED.

Рішення полягало в тому, щоб chown mysql.mysql /var/lib/mysql/*.pem. Як варіант, я припускаю, що якщо ви запустите mysql_ssl_rsa_setup як користувач mysql, він створить файли з правильними дозволами.


Питання - чотири роки та два місяці ... Навряд чи ОП відповість на вашу відповідь.
WinEunuuchs2Unix

1
Я розмістив це просто як послугу для майбутніх читачів, тому що це один із найкращих результатів пошуку Google щодо цієї проблеми, і нічого, що я прочитав, не допомогло вирішити свою проблему. Значення цієї відповіді стосовно стану світу в Ubuntu 12.04 і навіть 14.04 втрачає актуальність.
Крейг Райт

@ WinEunuuchs2Unix Можливо не ОП, але ось я, майже два роки пізніше шукаю саме цю відповідь. Отже, дякую Крейгу!
Oldskool

0

Файл приватного ключа повинен мати вигляд (формат PKCS №1):

-----BEGIN RSA PRIVATE KEY-----
. . .
-----END RSA PRIVATE KEY-----

Якщо ваш приватний ключ починається замість цього:

-----BEGIN PRIVATE KEY-----

(Формат PKCS № 8), то слід перетворити його так:

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

Не вручну додайте RSAтег "відсутній" " " вручну, оскільки формат інший.


-1

Параметри запуску SSL повинні знаходитись у верхній частині файлу my.cnf, інакше вони можуть бути проігноровані. У мене виникли проблеми із запуском mysql 5.6 на RHEL 6.4, де змінні SSL ігнорувались, я мав їх у кінці файлу my.cnf. Я перемістив їх у верхній частині файлу (трохи нижче [mysqld]), потім перезапустив сервер і все було добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.