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