Ubuntu 12.04 est livré avec un OpenSSL 1.0.1, qui a des valeurs par défaut quelque peu différentes de l'ancienne version d'OpenSSL 0.9.8.
Entre autres choses, si vous utilisez openssl req -newkey rsa:2048
pour générer une clé RSA, vous vous retrouverez avec une clé dans un format appelé PKCS # 8 . Représentées au format PEM, ces clés ont l'en- -----BEGIN PRIVATE KEY-----
tête plus générique , qui ne vous indique pas de quel type de clé (RSA, DSA, EC) il s'agit.
Auparavant, avec OpenSSL 0.9.8, les clés étaient toujours dans un format appelé PKCS # 1 , qui représentait PEM, avait l'en-tête -----BEGIN RSA PRIVATE KEY-----
.
Pour cette raison, vous ne pouvez pas simplement changer l'en-tête et le pied de page de:
-----BEGIN PRIVATE KEY-----
à
-----BEGIN RSA PRIVATE KEY-----`
Ce n'est pas la même chose et ça ne marchera pas. Au lieu de cela, vous devez convertir la clé dans l'ancien format à l'aide de openssl rsa
. Comme ça:
openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem
MySQL (v5.5.35) sur Ubuntu 12.04 utilise une implémentation SSL appelée yaSSL (v2.2.2). Il s'attend à ce que les clés soient au format PKCS # 1 et ne prennent pas en charge le format PKCS # 8 utilisé par OpenSSL 1.0 et plus récent. Si vous modifiez simplement l'en-tête et le pied de page, comme suggéré par d'autres articles de ce fil, MySQL / yaSSL ne se plaindra pas, mais vous ne pourrez pas vous connecter et vous retrouverez à la place avec une erreur comme celle-ci:
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
Ubuntu 14.04 est livré avec OpenSSL 1.0.1f et de nouveaux paramètres. Entre autres choses, il générera des certificats avec des résumés SHA256 au lieu de SHA1, qui était utilisé dans les versions antérieures. Soit dit en passant, la version yaSSL fournie avec MySQL ne prend pas cela en charge non plus.
Si vous générez des certificats à utiliser avec MySQL, n'oubliez pas de vous assurer que les clés RSA sont converties au format PEM PKCS # 1 traditionnel et que les certificats utilisent des résumés SHA1.
Voici un exemple de génération de votre propre autorité de certification, d'un certificat de serveur et d'un certificat client.
# 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