Увімкнення 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.