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.
Вот пример того, как создать свой собственный CA, сертификат сервера и сертификат клиента.
# 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