Här PHP (och mysqli_real_connect ) är klienten inte servern. Du konfigurerar den med mysqli_ssl_set för autentisering av klientcertifikat (och användande av servernyckeln och certifikatet).
Jag är inte säker på hur du har konfigurerat din MySQL-server, men det borde finnas något liknande detta i (MySQL)-serverdelen av konfigurationen:
ssl-key=/mysql-ssl-certs/server-key.pem
ssl-cert=/mysql-ssl-certs/server-cert.pem
ssl-ca=/mysql-ssl-certs/ca-cert.pem
Dessa tillhör ändå inte klientsidan (endast CA-certifikatet gör det, men definitivt inte serverns privata nyckel).
När du har gjort detta kan du försöka se om servern är korrekt konfigurerad med kommandoradsklienten:
mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
eller kanske detta (även om verifiera servercertifikat verkligen borde vara aktiverat för att SSL/TLS ska vara användbart)
mysql --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
Detta bör fungera åtminstone på kommandoraden.
Sedan, från PHP, får du två alternativ:
- använd
mysqli_ssl_setsom du har gjort, men lämnar$keyoch$certnull, såvida du inte vill använda ett klientcertifikat som verkligen borde skilja sig från ditt servercertifikat. (Jag kommer inte ihåg om det fungerar.) -
möjligen lättare, utelämna
mysqli_ssl_sethelt och hållet och konfigurera detta i din globala MySQL-klientkonfigurationsfil (där PHP ska kunna hämta den, möjligen/etc/mysql/my.cnf, men detta kan variera beroende på din distribution):[client] ssl-ca=/mysql-ssl-certs/ca-cert.pem
(Detta liknar serverkonfigurationen, men på klientsidan/i klientsektionen.)
För auktoriseringsdelen (GRANT ):
REQUIRE SSLkräver endast användning av SSL/TLSREQUIRE ISSUER,REQUIRE SUBJECTochREQUIRE X509kräva att klienten presenterar ett klientcertifikat för att jämföra med de obligatoriska värdena (det är fallet där du skulle behöva användassl-keyochssl-certpå klientsidan (config eller inommysqli_ssl_set).