Abilitazione di SSL in MySQL

23

Sto usando Ubuntu Server 12.04 e voglio abilitare le connessioni SSL a MySQL.

Ho generato i seguenti file keys / certs con OpenSSL:

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

Li ho memorizzati a /etc/mysql , poi ho aggiunto le seguenti righe a /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

Successivamente, ho riavviato il server con sudo service restart mysql .

Tuttavia, questo non sembra abilitare SSL. All'interno di una sessione 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  |
+---------------+----------------------------+

Qualche idea su cosa mi manca? Grazie

    
posta visitor93746 28.09.2012 - 16:38

7 risposte

33

Ubuntu 12.04 viene fornito con OpenSSL 1.0.1, che ha valori di default leggermente diversi rispetto alla versione precedente di OpenSSL 0.9.8.

Tra l'altro, se stai utilizzando openssl req -newkey rsa:2048 per generare una chiave RSA, ti ritroverai con una chiave in un formato chiamato PKCS # 8 . Rappresentate in formato PEM, queste chiavi hanno l'intestazione -----BEGIN PRIVATE KEY----- più generica, che non ti dice che tipo (RSA, DSA, EC) è la chiave.

In precedenza, con OpenSSL 0.9.8, le chiavi erano sempre in un formato chiamato PKCS # 1 , che rappresentava come PEM , aveva l'intestazione -----BEGIN RSA PRIVATE KEY----- .

Per questo motivo non puoi semplicemente modificare l'intestazione e il piè di pagina da:

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

a

-----BEGIN RSA PRIVATE KEY-----'

Non è la stessa cosa e non funzionerà. Invece è necessario convertire la chiave nel vecchio formato utilizzando openssl rsa . In questo modo:

openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem

MySQL (v5.5.35) su Ubuntu 12.04 utilizza un'implementazione SSL chiamata yaSSL (v2.2.2). Si aspetta che le chiavi siano nel formato PKCS # 1 e non supporta il formato PKCS # 8 utilizzato da OpenSSL 1.0 e successivi. Se cambi semplicemente l'intestazione e il piè di pagina, come suggerito da altri post in questa discussione, MySQL / yaSSL non si lamenterà, ma non sarai in grado di connettersi e finirà con un errore come questo:

ERROR 2026 (HY000): SSL connection error: protocol version mismatch

Ubuntu 14.04 viene fornito con OpenSSL 1.0.1f e nuove impostazioni. Tra le altre cose, genererà certificati con digest SHA256 anziché SHA1, che è stato utilizzato nelle versioni precedenti. Per inciso, la versione yaSSL in bundle con MySQL non supporta neanche questo.

Se stai generando certificati per l'utilizzo con MySQL, ricordati di assicurarti che le chiavi RSA siano convertite nel tradizionale formato PEM PKCS # 1 e che i certificati utilizzino i digest SHA1.

Ecco un esempio di come generare la propria CA, un certificato del server e un certificato 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
    
risposta data user262116 26.03.2014 - 04:26
4

Questo mi ha aiutato:

L'intestazione e il piè di pagina del file server-key.pem assomigliavano a questo:

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

Ma richiede qualcosa del genere:

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

Nota BEGIN RSA PRIVATE KEY

Per vedere il registro:

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

Spero che questo aiuti.

    
risposta data user194410 20.09.2013 - 00:22
2

Ho avuto gli stessi problemi in 12.04 ma in effetti era apparmor a causare i problemi.

Ho trovato una soluzione ai forum di Ubuntu , spostando .pem file in /etc/mysql risolto.

Puoi anche modificare la configurazione di apparmor in /etc/apparmor.d/usr.sbin.mysqld .

    
risposta data user273610 24.04.2014 - 14:49
1

Assicurati che l'utente che esegue il processo mysqld abbia accesso in lettura alle chiavi e ai file dei certificati. Se lanci MySQL usando l'account "mysql", dovresti:

/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

Altrimenti, potresti ottenere quanto segue nel tuo log degli errori:

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
    
risposta data Isabi 17.09.2013 - 21:56
0

Il file della chiave privata dovrebbe essere simile (formato PKCS # 1):

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

Se la tua chiave privata inizia invece con:

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

(formato PKCS # 8), quindi dovresti convertirlo in questo modo:

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

Non aggiungi manualmente il tag "missing" " RSA " a mano, perché il formato è diverso.

    
risposta data rustyx 07.08.2016 - 10:12
0

Su Ubuntu 16.04, ho eseguito mysql_ssl_rsa_setup , ho potuto vedere i file nelle variabili show come nella domanda, ma have_ssl e have_openssl hanno continuato a essere DISABLED .

La soluzione era a chown mysql.mysql /var/lib/mysql/*.pem . In alternativa, suppongo che se esegui mysql_ssl_rsa_setup come utente mysql, creerà i file con le autorizzazioni corrette.

    
risposta data Craig Wright 13.12.2016 - 01:04
-1

Le opzioni di avvio SSL dovrebbero essere nella parte superiore del tuo file my.cnf o potrebbero essere ignorate. Ho avuto problemi con mysql 5.6 su RHEL 6.4 dove le variabili SSL venivano ignorate, le avevo alla fine del file my.cnf. Li ho spostati nella parte superiore del file (appena sotto [mysqld]), quindi ho riavviato il server e tutto andava bene.

    
risposta data Christine 24.09.2014 - 20:04

Leggi altre domande sui tag