Tutaj PHP (i mysqli_real_connect ) to klient, a nie serwer. Konfigurujesz go za pomocą mysqli_ssl_set do uwierzytelniania klienta za pomocą certyfikatu (oraz używania klucza i certyfikatu serwera).
Nie jestem pewien, jak skonfigurowałeś serwer MySQL, ale powinno być coś takiego w sekcji konfiguracji serwera (MySQL):
ssl-key=/mysql-ssl-certs/server-key.pem
ssl-cert=/mysql-ssl-certs/server-cert.pem
ssl-ca=/mysql-ssl-certs/ca-cert.pem
I tak nie należą one do klienta (tylko certyfikat CA, ale na pewno nie klucz prywatny serwera).
Gdy to zrobisz, możesz spróbować sprawdzić, czy serwer jest poprawnie skonfigurowany za pomocą klienta wiersza poleceń:
mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
a może to (chociaż weryfikacja certyfikatu serwera powinna być naprawdę włączona, aby SSL/TLS było przydatne)
mysql --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
Powinno to działać przynajmniej w wierszu poleceń.
Następnie z PHP masz dwie opcje:
- użyj
mysqli_ssl_settak jak zrobiłeś, ale zostawiając$keyi$certnull, chyba że chcesz użyć certyfikatu klienta, który tak naprawdę powinien różnić się od certyfikatu serwera. (Nie pamiętam, czy to działa). -
prawdopodobnie łatwiej, pomiń
mysqli_ssl_setcałkowicie i skonfiguruj to w swoim globalnym pliku konfiguracyjnym klienta MySQL (gdzie PHP powinno być w stanie go pobrać, prawdopodobnie/etc/mysql/my.cnf, ale może się to różnić w zależności od dystrybucji):[client] ssl-ca=/mysql-ssl-certs/ca-cert.pem
(Jest to podobne do konfiguracji serwera, ale po stronie klienta/w sekcji klienta).
Dla części autoryzacyjnej (GRANT ):
REQUIRE SSLwymaga jedynie użycia SSL/TLSREQUIRE ISSUER,REQUIRE SUBJECTiREQUIRE X509wymagać od klienta przedstawienia certyfikatu klienta w celu porównania z wymaganymi wartościami (jest to przypadek, w którym musisz użyćssl-keyissl-certpo stronie klienta (config lub wmysqli_ssl_set).