Her PHP (og mysqli_real_connect
) er klienten ikke serveren. Du konfigurerer det med mysqli_ssl_set
til klient-certifikatgodkendelse (og brug af servernøglen og certifikatet).
Jeg er ikke sikker på, hvordan du har konfigureret din MySQL-server, men der burde være noget som dette i (MySQL)-serversektionen af konfigurationen:
ssl-key=/mysql-ssl-certs/server-key.pem
ssl-cert=/mysql-ssl-certs/server-cert.pem
ssl-ca=/mysql-ssl-certs/ca-cert.pem
Disse tilhører alligevel ikke klientsiden (det gør kun CA-certifikatet, men bestemt ikke serverens private nøgle).
Når du har gjort dette, kan du prøve at se, om serveren er konfigureret korrekt ved hjælp af kommandolinjeklienten:
mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
eller måske dette (selvom verify server cert virkelig burde være aktiveret for at SSL/TLS er nyttigt)
mysql --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
Dette bør i det mindste fungere på kommandolinjen.
Så fra PHP får du to muligheder:
- brug
mysqli_ssl_set
som du har gjort, men efterlader$key
og$cert
null, medmindre du vil bruge et klientcertifikat, som virkelig burde være forskelligt fra dit servercertifikat. (Jeg kan ikke huske, om det virker.) -
muligvis nemmere, udelad
mysqli_ssl_set
helt og konfigurere dette i din globale MySQL-klientkonfigurationsfil (hvor PHP skal kunne hente det, muligvis/etc/mysql/my.cnf
, men dette kan variere afhængigt af din distribution):[client] ssl-ca=/mysql-ssl-certs/ca-cert.pem
(Dette svarer til serverkonfigurationen, men på klientsiden/i klientsektionen.)
For autorisationsdelen (GRANT
):
REQUIRE SSL
kræver kun brug af SSL/TLSREQUIRE ISSUER
,REQUIRE SUBJECT
ogREQUIRE X509
kræve, at klienten præsenterer et klientcertifikat for at sammenligne med de påkrævede værdier (det er tilfældet, hvor du skal brugessl-key
ogssl-cert
på klientsiden (config eller imysqli_ssl_set
).