sql >> Database >  >> RDS >> Mysql

PHP naar MySQL SSL-verbindingen

Hier PHP (en mysqli_real_connect ) is de client niet de server. Je configureert het met mysqli_ssl_set voor authenticatie van clientcertificaten (en met behulp van de serversleutel en het certificaat).

Ik weet niet zeker hoe je je MySQL-server hebt geconfigureerd, maar er zou zoiets moeten staan ​​in het (MySQL)-servergedeelte van de configuratie:

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

Deze horen sowieso niet bij de client (alleen het CA-certificaat, maar zeker niet de privésleutel van de server).

Zodra je dit hebt gedaan, kun je proberen om te zien of de server correct is geconfigureerd met behulp van de opdrachtregelclient:

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

of misschien dit (hoewel het verifiëren van het servercertificaat echt moet zijn ingeschakeld om SSL/TLS te laten werken)

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

Dit zou in ieder geval op de opdrachtregel moeten werken.

Dan krijg je van PHP twee opties:

  • gebruik mysqli_ssl_set zoals je hebt gedaan, maar met $key en $cert null, tenzij u een clientcertificaat wilt gebruiken dat echt anders zou moeten zijn dan uw servercertificaat. (Ik weet niet meer of dat werkt.)
  • mogelijk makkelijker, laat mysqli_ssl_set weg en configureer dit in uw algemene MySQL-clientconfiguratiebestand (waar PHP het zou moeten kunnen ophalen, mogelijk /etc/mysql/my.cnf , maar dit kan variëren afhankelijk van uw distributie):

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

(Dit is vergelijkbaar met de serverconfiguratie, maar aan de clientzijde/in het clientgedeelte.)

Voor het autorisatiegedeelte (GRANT ):

  • REQUIRE SSL vereist alleen het gebruik van SSL/TLS
  • REQUIRE ISSUER , REQUIRE SUBJECT en REQUIRE X509 vereisen dat de klant een klantcertificaat presenteert om te vergelijken met de vereiste waarden (in dat geval zou u ssl-key moeten gebruiken en ssl-cert aan de clientzijde (config of binnen mysqli_ssl_set ).


  1. Unicode in MySQL Regex?

  2. Hoe array-lijst in zigzag sorteren in PHP?

  3. Mysql select * from geeft niet alle rijen terug

  4. 2 manieren om een ​​substring in MariaDB te vervangen