sql >> Base de Datos >  >> RDS >> Mysql

Conexiones PHP a MySQL SSL

Aquí PHP (y mysqli_real_connect ) es el cliente, no el servidor. Lo estás configurando con mysqli_ssl_set para la autenticación de certificado de cliente (y usando la clave y el certificado del servidor).

No estoy seguro de cómo configuró su servidor MySQL, pero debería haber algo como esto en la sección del servidor (MySQL) de la configuración:

ssl-key=/mysql-ssl-certs/server-key.pem
ssl-cert=/mysql-ssl-certs/server-cert.pem
ssl-ca=/mysql-ssl-certs/ca-cert.pem

De todos modos, estos no pertenecen al lado del cliente (solo el certificado de CA, pero definitivamente no la clave privada del servidor).

Una vez que haya hecho esto, puede intentar ver si el servidor está configurado correctamente usando el cliente de línea de comandos:

mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...

o tal vez esto (aunque verificar el certificado del servidor realmente debería estar habilitado para que SSL/TLS sea útil)

mysql --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...

Esto debería funcionar al menos en la línea de comando.

Luego, desde PHP, tienes dos opciones:

  • usar mysqli_ssl_set como lo has hecho, pero dejando $key y $cert nulo, a menos que desee utilizar un certificado de cliente que realmente debería ser diferente de su certificado de servidor. (No recuerdo si eso funciona).
  • posiblemente más fácil, omita mysqli_ssl_set en conjunto y configure esto en su archivo de configuración de cliente MySQL global (donde PHP debería poder recogerlo, posiblemente /etc/mysql/my.cnf , pero esto puede variar dependiendo de su distribución):

    [client]
    ssl-ca=/mysql-ssl-certs/ca-cert.pem
    

(Esto es similar a la configuración del servidor, pero en el lado del cliente/en la sección del cliente).

Para la parte de autorización (GRANT ):

  • REQUIRE SSL solo requiere el uso de SSL/TLS
  • REQUIRE ISSUER , REQUIRE SUBJECT y REQUIRE X509 requiere que el cliente presente un certificado de cliente para comparar con los valores requeridos (ese es el caso en el que necesitaría usar ssl-key y ssl-cert en el lado del cliente (config o dentro de mysqli_ssl_set ).