Đây PHP (và mysqli_real_connect
) là máy khách không phải máy chủ. Bạn đang định cấu hình nó bằng mysqli_ssl_set
để xác thực chứng chỉ ứng dụng khách (và sử dụng khóa máy chủ và chứng chỉ).
Tôi không chắc bạn đã định cấu hình máy chủ MySQL của mình như thế nào, nhưng sẽ có một cái gì đó như thế này trong phần máy chủ (MySQL) của cấu hình:
ssl-key=/mysql-ssl-certs/server-key.pem
ssl-cert=/mysql-ssl-certs/server-cert.pem
ssl-ca=/mysql-ssl-certs/ca-cert.pem
Những thứ này dù sao cũng không thuộc về phía máy khách (chỉ có chứng chỉ CA mới có, nhưng chắc chắn không phải là khóa riêng của máy chủ).
Sau khi thực hiện xong việc này, bạn có thể thử xem máy chủ có được định cấu hình đúng cách hay không bằng ứng dụng khách dòng lệnh:
mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
hoặc có lẽ điều này (mặc dù chứng chỉ máy chủ xác minh thực sự nên được bật để SSL / TLS hữu ích)
mysql --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
Điều này sẽ hoạt động ít nhất trên dòng lệnh.
Sau đó, từ PHP, bạn nhận được hai tùy chọn:
- sử dụng
mysqli_ssl_set
như bạn đã làm, nhưng vẫn để lại$key
và$cert
null, trừ khi bạn muốn sử dụng chứng chỉ máy khách thực sự phải khác với chứng chỉ máy chủ của bạn. (Tôi không thể nhớ liệu cách đó có hiệu quả hay không.) -
có thể dễ dàng hơn, bỏ qua
mysqli_ssl_set
hoàn toàn và định cấu hình điều này trong tệp cấu hình máy khách MySQL toàn cầu của bạn (nơi PHP có thể lấy nó, có thể là/etc/mysql/my.cnf
, nhưng điều này có thể khác nhau tùy thuộc vào phân phối của bạn):[client] ssl-ca=/mysql-ssl-certs/ca-cert.pem
(Điều này tương tự với cấu hình máy chủ, nhưng ở phía máy khách / trong phần máy khách.)
Đối với phần ủy quyền (GRANT
):
-
REQUIRE SSL
chỉ yêu cầu sử dụng SSL / TLS -
REQUIRE ISSUER
,REQUIRE SUBJECT
vàREQUIRE X509
yêu cầu ứng dụng khách xuất trình chứng chỉ ứng dụng khách để so sánh với các giá trị bắt buộc (đó là trường hợp bạn cần sử dụngssl-key
vàssl-cert
ở phía máy khách (cấu hình hoặc trongmysqli_ssl_set
).