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/TLSREQUIRE ISSUER
,REQUIRE SUBJECT
undREQUIRE X509
verlangen, dass der Client ein Client-Zertifikat vorlegt, um es mit den erforderlichen Werten zu vergleichen (das ist der Fall, wenn Siessl-key
verwenden müssten undssl-cert
auf der Client-Seite (config oder innerhalb vonmysqli_ssl_set
).