MySQL configurato per SSL, ma SSL è ancora DISABILITATO ..!


9

Ho configurato SSL per MySQL usando il seguente script.

#!/bin/bash
#
mkdir -p /root/abc/ssl_certs
cd /root/abc/ssl_certs
#
echo "--> 1. Create CA cert, private key"
openssl genrsa 2048 > ca-key.pem

echo "--> 2. Create CA cert, certificate"
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

echo "--> 3. Create Server certificate, key"
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem

echo "--> 4. Create Server certificate, cert"
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
echo ""
echo 
echo ""

echo "--> 5. Create client certificate, key. Use DIFFERENT common name then server!!!!"
echo ""
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
echo "6. Create client certificate, cert"
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
exit 0

Sono stati creati i seguenti file:

ca-key.pem             ca-cert.pem
server-req.pem         server-key.pem       server-cert.pem
client-req.pem         client-key.pem       client-cert.pem

Quindi ho combinato server-cert.pem e client-cert.pem in ca.pem (ho letto in un post per farlo ..)

Ho creato un utente SSL in MySQL:

GRANT ALL ON  *.* to sslsuer@hostname IDENTIFIED BY 'pwd' REQUIRE SSL;

Successivamente ho aggiunto quanto segue in my.cnf

[mysqld]
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

Dopo aver riavviato il server, mi sono connesso a mysql ma SSL non era ancora in uso :(

mysql -u ssluser -p

SSL:                    Not in use

Anche il parametro have_ssl mostrava ancora disabilitato .. :(

mysql> show variables like '%ssl%';
+---------------+---------------------------------------------+
| Variable_name | Value                                       |
+---------------+---------------------------------------------+
| have_openssl  | DISABLED                                    |
| have_ssl      | DISABLED                                    |
| ssl_ca        | /root/abc/ssl_certs/ca.pem          |
| ssl_capath    |                                             |
| ssl_cert      | /root/abc/ssl_certs/server-cert.pem |
| ssl_cipher    |                                             |
| ssl_key       | /root/abc/ssl_certs/server-key.pem  |
+---------------+---------------------------------------------+

Ho perso qualche passo o cosa c'è che non va ..

Le risposte con passaggi mancanti dettagliatamente saranno molto apprezzate.


Quale versione di OpenSSL stai usando? E si prega di abilitare la registrazione errori + avvisi in MySQL. Se visualizzi il messaggio di errore "Impossibile leggere la chiave privata", probabilmente sei colpito da questo bug in qualche modo. Creare nuove chiavi + certificati su un sistema precedente, usandole su un recente MySQL ha risolto il problema per me.
gertvdijk,

@gertvdijk Ho usato openssl-1.0.1c. Sto verificando i log per l'errore indicato.
Raggi di sole

Prima di tutto. Controlla se mysql supporta ssl. mysql --ssl --helpInoltre, non dimenticare di riavviare mysql dopo aver apportato le modifiche a my.cnf
Valentin Bajrami,

1
@ val0x00ff sì MySQL supporta ssl se il valore have_ssl è disabilitato.
Raggi di sole il

prova mysql --ssl -u ssluser -pa forzare SSL sul client. dopo che funziona si può trto identificare perché REQUIRE SSL no.
johannes,

Risposte:



3

Prova a controllare questo:

  • Abilita la registrazione dell'output di avviso di MySQL e leggi le voci di registro effettive.
  • Controlla i permessi del filesystem per consentire all'utente su quale MySQL esegue ( mysql?) Di leggere i file. In /rootnon penso che abbia di default.
  • Apparmor o SELinux impediscono a MySQL di leggere i certificati e le chiavi?
  • Potresti essere colpito da un brutto bug di una recente incompatibilità tra OpenSSL e MySQL. Non sono stato in grado di generare chiavi su Ubuntu 12.04 che MySQL potesse leggere, mentre quelle che ho generato su Debian Squeeze funzionano bene.

2

Su Ubuntu, puoi verificare se apparmorblocca l'accesso ai tuoi file cert, vedi il manuale .

Quindi è necessario controllare le autorizzazioni / proprietà dei file e aggiungere i diritti necessari a /etc/apparmor.d/usr.sbin.mysqld. Vedi questa discussione .



0

Aggiungi "ssl" nella [mysqld]sezione my.cnfcome file

ssl
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

e quindi riavviare mysql e ricontrollare. Funzionerà.


0

Credo che questo problema sia dovuto al fatto che non hai specificato correttamente i percorsi dei file per il tuo certificato CA, chiave del server e certificato del server. Deve essere nel seguente formato ...

ssl-ca=path/to/repo/mysql-directory/path/to/pem/cacert.pem
ssl-cert=path/to/repo/mysql-directory/path/to/pem/server-cert.pem
ssl-key=path/to/repo/mysql-directory/path/to/pem/server-key.pem

vale a dire che è necessario il PERCORSO DI FILE COMPLETO delle certs e delle chiavi all'interno della cartella di installazione di mysql non un percorso '/ root /' relativo.

Ecco un esempio dalla mia installazione:

mysql> show variables like '%ssl%';
+---------------+----------------------------------------------------------+
| Variable_name | Value                                                    |
+---------------+----------------------------------------------------------+
| have_openssl  | YES                                                      |
| have_ssl      | YES                                                      |
| ssl_ca        | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/ca.pem         |
| ssl_capath    |                                                          |
| ssl_cert      | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-cert.pem|
| ssl_cipher    |                                                          |
| ssl_key       | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-key.pem |
+---------------+----------------------------------------------------------+

Fare riferimento al seguente link per ulteriori informazioni. https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-ssl.html


I suoi percorsi iniziano con a /, il che significa che sono percorsi completi, non percorsi relativi. /root/è la cartella principale per l'utente root su un sistema unix.
bobpaul
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.