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_set
tak jak zrobiłeś, ale zostawiając$key
i$cert
null, 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_set
cał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 SSL
wymaga jedynie użycia SSL/TLSREQUIRE ISSUER
,REQUIRE SUBJECT
iREQUIRE X509
wymagać od klienta przedstawienia certyfikatu klienta w celu porównania z wymaganymi wartościami (jest to przypadek, w którym musisz użyćssl-key
issl-cert
po stronie klienta (config lub wmysqli_ssl_set
).