Ubuntu 12.04 est livré avec OpenSSL 1.0.1, qui a des valeurs par défaut légèrement différentes de celles 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-tête -----BEGIN PRIVATE KEY-----
plus générique, ce qui ne vous dit pas de quel type (RSA, DSA, EC) la clé elles sont.
Auparavant, avec OpenSSL 0.9.8, les clés étaient toujours dans un format appelé PKCS # 1 , qui était représenté par PEM. , avait l'en-tête -----BEGIN RSA PRIVATE KEY-----
.
De ce fait, vous ne pouvez pas simplement changer l’en-tête et le pied de page à partir 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é à l'ancien format en utilisant 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). Les clés doivent être au format PKCS # 1 et ne prennent pas en charge le format PKCS # 8 utilisé par OpenSSL 1.0 et les versions plus récentes. 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 avec une erreur comme celle-ci:
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
Ubuntu 14.04 est fourni avec OpenSSL 1.0.1f et les nouveaux paramètres. Entre autres choses, il génèrera des certificats avec des condensés SHA256 au lieu de SHA1, qui était utilisé dans les versions antérieures. Incidemment, la version de yaSSL fournie avec MySQL ne le supporte pas 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 les condensés SHA1.
Voici un exemple de la façon de générer votre propre autorité de certification, un certificat de serveur et 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