Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Conexões PHP para MySQL SSL


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, omita mysqli_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/TLS
  • REQUIRE ISSUER , REQUIRE SUBJECT e REQUIRE X509 exigir que o cliente apresente um certificado de cliente para comparar com os valores necessários (este é o caso em que você precisaria usar ssl-key e ssl-cert no lado do cliente (config ou dentro de mysqli_ssl_set ).