Здесь 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
пустыми, если только вы не хотите использовать сертификат клиента, который действительно должен отличаться от сертификата вашего сервера.(Я не могу вспомнить, работает ли это.) возможно, проще, пропустите mysqli_ssl_set
в целом и настройте это в вашем глобальном файле конфигурации клиента MySQL (где PHP должен иметь возможность подобрать его, возможно,/etc/mysql/my.cnf
, но это может варьироваться в зависимости от вашего дистрибутива):
[client]
ssl-ca=/mysql-ssl-certs/ca-cert.pem
(Это похоже на конфигурацию сервера, но на стороне клиента / в разделе клиента.)
Для части авторизации (GRANT
):
REQUIRE SSL
требуется только использование SSL / TLS REQUIRE ISSUER
, REQUIRE SUBJECT
иREQUIRE X509
требует, чтобы клиент предоставил сертификат клиента для сравнения с необходимыми значениями (это тот случай, когда вам нужно будет использовать ssl-key
и ssl-cert
на стороне клиента (config или в mysqli_ssl_set
).