Activer SSL dans MySQL

23

J'utilise Ubuntu Server 12.04 et je veux activer les connexions SSL vers MySQL.

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

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

J'ai stocké ces fichiers à /etc/mysql , puis 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  |
+---------------+----------------------------+

Avez-vous des idées qui me manquent? Merci

    
posée visitor93746 28.09.2012 - 16:38
la source

7 réponses

33

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
    
réponse donnée user262116 26.03.2014 - 04:26
la source
4

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 il faut quelque chose comme ça:

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

Notez la balise RSA PRIVATE

Pour voir le journal:

sudo vim /var/log/mysql/error.log

J'espère que ça aide.

    
réponse donnée user194410 20.09.2013 - 00:22
la source
2

J'ai eu les mêmes ennuis le 12.04, mais ce sont en fait les principaux facteurs qui ont causé les problèmes.

J'ai trouvé une solution sur les forums Ubuntu , en y déplaçant le fichier .pem dans /etc/mysql .

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

    
réponse donnée user273610 24.04.2014 - 14:49
la source
1

Assurez-vous que l'utilisateur qui exécute le processus mysqld dispose d'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
    
réponse donnée Isabi 17.09.2013 - 21:56
la source
0

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 par:

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

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

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

Ne pas ajouter manuellement la balise "manquante" " RSA ", car le format est différent.

    
réponse donnée rustyx 07.08.2016 - 10:12
la source
0

Sous Ubuntu 16.04, j'ai exécuté mysql_ssl_rsa_setup , pouvait voir les fichiers dans les variables show comme dans la question, mais have_ssl et have_openssl continuaient à être DISABLED .

La solution était à chown mysql.mysql /var/lib/mysql/*.pem . Alternativement, je suppose que si vous lancez mysql_ssl_rsa_setup en tant qu'utilisateur mysql, cela créera les fichiers avec les permissions correctes.

    
réponse donnée Craig Wright 13.12.2016 - 01:04
la source
-1

Les options de démarrage SSL doivent figurer en haut de votre fichier my.cnf ou elles peuvent être ignorées. J'ai eu des problèmes pour exécuter mysql 5.6 sur RHEL 6.4 où les variables SSL étaient ignorées, je les avais à la fin du fichier my.cnf. Je les ai déplacés en haut du fichier (juste en dessous de [mysqld]) puis j'ai redémarré le serveur et tout allait bien.

    
réponse donnée Christine 24.09.2014 - 20:04
la source

Lire d'autres questions sur les étiquettes