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_setcome hai fatto, ma lasciando$keye$certnull, 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_setdel 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 SSLrichiede solo l'uso di SSL/TLSREQUIRE ISSUER,REQUIRE SUBJECTeREQUIRE X509richiedere al cliente di presentare un certificato cliente da confrontare con i valori richiesti (questo è il caso in cui è necessario utilizzaressl-keyessl-certlato client (config o all'interno dimysqli_ssl_set).