web-dev-qa-db-fra.com

Activer SSL dans MySQL

J'utilise Ubuntu Server 12.04 et je souhaite activer les connexions SSL à MySQL.

J'ai généré les fichiers clés/certs suivants avec OpenSSL:

  • ca-cert.pem
  • server-cert.pem
  • server-key.pem

Je les ai stockés à /etc/mysql, puis j'ai ajouté les lignes suivantes à /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

Ensuite, j'ai redémarré le serveur avec Sudo service restart mysql.

Cependant, cela ne semble pas activer SSL. Dans une session 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  |
+---------------+----------------------------+

Des idées ce qui me manque? Merci

24
visitor93746

Ubuntu 12.04 est livré avec OpenSSL 1.0.1, avec des valeurs par défaut quelque peu différentes de celles de l’ancienne version OpenSSL 0.9.8.

Entre autres choses, si vous utilisez openssl req -newkey rsa:2048 pour générer une clé RSA, vous obtiendrez une clé dans un format appelé PKCS # 8 . Représentées au format PEM, ces clés ont l'en-tête plus générique -----BEGIN PRIVATE KEY-----, qui ne vous dit 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 comme suit:

-----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 à 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 publications dans ce fil de discussion, MySQL/yaSSL ne se plaindra pas, mais vous ne pourrez pas vous connecter et vous obtiendrez 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 de nouveaux paramètres. Entre autres choses, il générera des certificats avec les empreintes SHA256 au lieu de SHA1, qui était utilisé dans les versions précédentes. Incidemment, la version yaSSL fournie avec MySQL ne le supporte pas non plus.

Si vous générez des certificats pour une utilisation avec MySQL, assurez-vous que les clés RSA sont converties au format PEM PKCS # 1 traditionnel et que les certificats utilisent des condensés SHA1.

Voici un exemple montrant comment 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
33
user262116

Cela m'a aidé:

L'en-tête et le pied de page du fichier server-key.pem ressemblaient à ceci:

-----BEGIN PRIVATE KEY-----
...
...
-----END PRIVATE KEY-----

Mais cela nécessite quelque chose comme ça:

-----BEGIN RSA PRIVATE KEY-----
...
...
-----END RSA PRIVATE KEY-----

Notez le début RSA clé privée

Pour voir le journal:

Sudo vim /var/log/mysql/error.log

J'espère que cela t'aides.

4
user194410

J'ai eu les mêmes problèmes le 12 avril, mais c'est en fait un responsable qui a causé les problèmes.

J'ai trouvé ne solution sur les forums Ubunt , le déplacement des fichiers .pem dans /etc/mysql l'a résolu.

Vous pouvez également modifier la configuration de apparmor dans /etc/apparmor.d/usr.sbin.mysqld.

3
user273610

Sur Ubuntu 16.04, j'ai exécuté mysql_ssl_rsa_setup, je pouvais voir les fichiers dans show variables comme dans la question, mais have_ssl et have_openssl étaient toujours DISABLEDname__.

La solution était de chown mysql.mysql /var/lib/mysql/*.pem. Sinon, je suppose que si vous exécutez mysql_ssl_rsa_setup en tant qu'utilisateur mysql, il créera les fichiers avec les autorisations appropriées.

1
Craig Wright

Assurez-vous que l'utilisateur qui exécute le processus mysqld a un accès en lecture aux clés et aux fichiers de certificat. Si vous lancez MySQL en utilisant le compte "mysql", vous devriez:

/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

Sinon, vous pourriez obtenir les informations suivantes dans votre journal des erreurs:

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
1
Isabi

Le fichier de clé privée doit ressembler à (format PKCS # 1):

-----BEGIN RSA PRIVATE KEY-----
. . .
-----END RSA PRIVATE KEY-----

Si votre clé privée commence à la place par:

-----BEGIN PRIVATE KEY-----

(Format PKCS # 8), alors vous devriez le convertir comme ceci:

openssl rsa -in server-key.pem -out server-key.pem

Don't ajouter manuellement la balise "manquante" "RSA" à la main, car le format est différent.

0
rustyx