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/TLSREQUIRE ISSUER
,REQUIRE SUBJECT
etREQUIRE X509
exiger que le client présente un certificat client à comparer aux valeurs requises (c'est le cas où vous auriez besoin d'utiliserssl-key
etssl-cert
côté client (config ou dansmysqli_ssl_set
).