Aqui PHP (e
mysqli_real_connect ) é o cliente e não o servidor. Você está configurando com mysqli_ssl_set para autenticação de certificado de cliente (e usando a chave e o certificado do servidor). Não tenho certeza de como você configurou seu servidor MySQL, mas deve haver algo assim na seção do servidor (MySQL) da configuração:
ssl-key=/mysql-ssl-certs/server-key.pem
ssl-cert=/mysql-ssl-certs/server-cert.pem
ssl-ca=/mysql-ssl-certs/ca-cert.pem
Eles não pertencem ao lado do cliente de qualquer maneira (apenas o certificado CA, mas definitivamente não a chave privada do servidor).
Depois de fazer isso, você pode tentar ver se o servidor está configurado corretamente usando o cliente de linha de comando:
mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
ou talvez isso (embora o certificado do servidor de verificação deva realmente estar ativado para que o SSL/TLS seja útil)
mysql --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
Isso deve funcionar pelo menos na linha de comando.
Então, do PHP, você tem duas opções:
- use
mysqli_ssl_setcomo você fez, mas deixando$keye$certnull, a menos que você queira usar um certificado de cliente que realmente deve ser diferente do certificado de servidor. (Não me lembro se isso funciona.) -
possivelmente mais fácil, omitamysqli_ssl_setcompletamente e configure isso em seu arquivo global de configuração do cliente MySQL (onde o PHP deve ser capaz de pegá-lo, possivelmente/etc/mysql/my.cnf, mas isso pode variar dependendo da sua distribuição):
[client] ssl-ca=/mysql-ssl-certs/ca-cert.pem
(Isso é semelhante à configuração do servidor, mas no lado do cliente/na seção do cliente.)
Para a parte de autorização (
GRANT ):REQUIRE SSLrequer apenas o uso de SSL/TLSREQUIRE ISSUER,REQUIRE SUBJECTeREQUIRE X509exigir que o cliente apresente um certificado de cliente para comparar com os valores necessários (este é o caso em que você precisaria usarssl-keyessl-certno lado do cliente (config ou dentro demysqli_ssl_set).