Mysql
 sql >> Base de données >  >> RDS >> Mysql

Connexions PHP à MySQL SSL

Ici PHP (et mysqli_real_connect ) est le client et non le serveur. Vous le configurez avec mysqli_ssl_set pour l'authentification par certificat client (et à l'aide de la clé et du certificat du serveur).

Je ne sais pas comment vous avez configuré votre serveur MySQL, mais il devrait y avoir quelque chose comme ça dans la section serveur (MySQL) de la configuration :

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

Celles-ci n'appartiennent de toute façon pas au côté client (seul le certificat CA le fait, mais certainement pas la clé privée du serveur).

Une fois que vous avez fait cela, vous pouvez essayer de voir si le serveur est correctement configuré en utilisant le client en ligne de commande :

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

ou peut-être ceci (bien que vérifier le certificat du serveur devrait vraiment être activé pour que SSL/TLS soit utile)

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

Cela devrait fonctionner au moins sur la ligne de commande.

Ensuite, depuis PHP, vous obtenez deux options :

  • utiliser mysqli_ssl_set comme vous l'avez fait, mais en laissant $key et $cert null, sauf si vous souhaitez utiliser un certificat client qui devrait vraiment être différent de votre certificat serveur. (Je ne me souviens pas si cela fonctionne.)
  • peut-être plus facile, omettez mysqli_ssl_set ensemble et configurez-le dans votre fichier de configuration client MySQL global (où PHP devrait pouvoir le récupérer, éventuellement /etc/mysql/my.cnf , mais cela peut varier selon votre distribution) :

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

(Ceci est similaire à la configuration du serveur, mais côté client/dans la section client.)

Pour la partie autorisation (GRANT ):

  • REQUIRE SSL nécessite uniquement l'utilisation de SSL/TLS
  • REQUIRE ISSUER , REQUIRE SUBJECT et REQUIRE X509 exiger que le client présente un certificat client à comparer aux valeurs requises (c'est le cas où vous auriez besoin d'utiliser ssl-key et ssl-cert côté client (config ou dans mysqli_ssl_set ).