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/TLSREQUIRE ISSUER
,REQUIRE SUBJECT
eREQUIRE X509
richiedere al cliente di presentare un certificato cliente da confrontare con i valori richiesti (questo è il caso in cui è necessario utilizzaressl-key
essl-cert
lato client (config o all'interno dimysqli_ssl_set
).