Тук PHP (и mysqli_real_connect
) е клиентът, а не сървърът. Вие го конфигурирате с mysqli_ssl_set
за удостоверяване на клиентски сертификат (и използване на сървърния ключ и сертификат).
Не съм сигурен как сте конфигурирали вашия MySQL сървър, но трябва да има нещо подобно в секцията (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
Те така или иначе не принадлежат на клиентската страна (само сертификатът на CA, но определено не и частният ключ на сървъра).
След като направите това, можете да опитате да видите дали сървърът е конфигуриран правилно, като използвате клиента на командния ред:
mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
или може би това (въпреки че удостоверяването на сървърния сертификат наистина трябва да бъде активирано, за да бъде полезен SSL/TLS)
mysql --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
Това трябва да работи поне на командния ред.
След това от PHP получавате две опции:
- използвайте
mysqli_ssl_set
както сте направили, но оставяте$key
и$cert
null, освен ако не искате да използвате клиентски сертификат, който наистина би трябвало да се различава от вашия сървърен сертификат. (Не мога да си спомня дали това работи.) -
евентуално по-лесно, пропуснете
mysqli_ssl_set
напълно и конфигурирайте това във вашия глобален конфигурационен файл на MySQL клиент (където PHP трябва да може да го вземе, вероятно/etc/mysql/my.cnf
, но това може да варира в зависимост от вашата дистрибуция):[client] ssl-ca=/mysql-ssl-certs/ca-cert.pem
(Това е подобно на конфигурацията на сървъра, но от страната на клиента/в клиентската секция.)
За частта за оторизация (GRANT
):
REQUIRE SSL
изисква само използването на SSL/TLSREQUIRE ISSUER
,REQUIRE SUBJECT
иREQUIRE X509
изисква от клиента да представи клиентски сертификат, за да се сравни с необходимите стойности (това е случаят, когато трябва да използватеssl-key
иssl-cert
от страна на клиента (config или в рамките наmysqli_ssl_set
).