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_set
como você fez, mas deixando$key
e$cert
null, 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_set
completamente 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 SSL
requer apenas o uso de SSL/TLSREQUIRE ISSUER
,REQUIRE SUBJECT
eREQUIRE X509
exigir que o cliente apresente um certificado de cliente para comparar com os valores necessários (este é o caso em que você precisaria usarssl-key
essl-cert
no lado do cliente (config ou dentro demysqli_ssl_set
).