Mysql
 sql >> Database >  >> RDS >> Mysql

Connessioni da PHP a MySQL SSL

Qui PHP (e mysqli_real_connect ) è il client non il server. Lo stai configurando con mysqli_ssl_set per l'autenticazione del certificato client (e utilizzando la chiave del server e il certificato).

Non sono sicuro di come hai configurato il tuo server MySQL, ma dovrebbe esserci qualcosa di simile nella sezione del server (MySQL) della configurazione:

ssl-key=/mysql-ssl-certs/server-key.pem
ssl-cert=/mysql-ssl-certs/server-cert.pem
ssl-ca=/mysql-ssl-certs/ca-cert.pem

Questi non appartengono comunque al lato client (lo fa solo il certificato CA, ma sicuramente non la chiave privata del server).

Una volta fatto, puoi provare a vedere se il server è configurato correttamente usando il client della riga di comando:

mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...

o forse questo (sebbene la verifica del certificato del server dovrebbe essere davvero abilitata affinché SSL/TLS sia utile)

mysql --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...

Questo dovrebbe funzionare almeno sulla riga di comando.

Quindi, da PHP, ottieni due opzioni:

  • usa mysqli_ssl_set come hai fatto, ma lasciando $key e $cert null, a meno che tu non voglia utilizzare un certificato client che dovrebbe essere davvero diverso dal certificato del tuo server. (Non ricordo se funziona.)
  • possibilmente più semplice, ometti mysqli_ssl_set del tutto e configuralo nel tuo file di configurazione del client MySQL globale (dove PHP dovrebbe essere in grado di prelevarlo, possibilmente /etc/mysql/my.cnf , ma può variare a seconda della distribuzione):

    [client]
    ssl-ca=/mysql-ssl-certs/ca-cert.pem
    

(Questo è simile alla configurazione del server, ma sul lato client/nella sezione client.)

Per la parte di autorizzazione (GRANT ):

  • REQUIRE SSL richiede solo l'uso di SSL/TLS
  • REQUIRE ISSUER , REQUIRE SUBJECT e REQUIRE X509 richiedere al cliente di presentare un certificato cliente da confrontare con i valori richiesti (questo è il caso in cui è necessario utilizzare ssl-key e ssl-cert lato client (config o all'interno di mysqli_ssl_set ).