Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SSL-Verbindungen von PHP zu MySQL

Hier PHP (und mysqli_real_connect ) ist der Client, nicht der Server. Sie konfigurieren es mit mysqli_ssl_set für Client-Zertifikat-Authentifizierung (und unter Verwendung des Serverschlüssels und -zertifikats).

Ich bin mir nicht sicher, wie Sie Ihren MySQL-Server konfiguriert haben, aber im (MySQL)-Server-Abschnitt der Konfiguration sollte so etwas stehen:

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

Diese gehören ohnehin nicht zur Client-Seite (nur das CA-Zertifikat, aber definitiv nicht der private Schlüssel des Servers).

Sobald Sie dies getan haben, können Sie versuchen zu sehen, ob der Server richtig konfiguriert ist, indem Sie den Befehlszeilen-Client verwenden:

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

oder vielleicht dies (obwohl Serverzertifikat überprüfen sollte wirklich aktiviert sein, damit SSL/TLS nützlich ist)

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

Dies sollte zumindest auf der Kommandozeile funktionieren.

Dann erhalten Sie von PHP zwei Optionen:

  • benutze mysqli_ssl_set wie Sie es getan haben, aber lassen Sie $key und $cert null, es sei denn, Sie möchten ein Client-Zertifikat verwenden, das sich wirklich von Ihrem Server-Zertifikat unterscheiden sollte. (Ich kann mich nicht erinnern, ob das funktioniert.)
  • möglicherweise einfacher, lassen Sie mysqli_ssl_set weg zusammen und konfigurieren Sie dies in Ihrer globalen MySQL-Client-Konfigurationsdatei (wo PHP es abholen können sollte, möglicherweise /etc/mysql/my.cnf , dies kann jedoch je nach Distribution variieren):

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

(Dies ist ähnlich wie die Serverkonfiguration, aber auf der Clientseite/im Clientbereich.)

Für den Autorisierungsteil (GRANT ):

  • REQUIRE SSL erfordert nur die Verwendung von SSL/TLS
  • REQUIRE ISSUER , REQUIRE SUBJECT und REQUIRE X509 verlangen, dass der Client ein Client-Zertifikat vorlegt, um es mit den erforderlichen Werten zu vergleichen (das ist der Fall, wenn Sie ssl-key verwenden müssten und ssl-cert auf der Client-Seite (config oder innerhalb von mysqli_ssl_set ).