Đâ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_setnhư bạn đã làm, nhưng vẫn để lại$keyvà$certnull, 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_sethoà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 SSLchỉ yêu cầu sử dụng SSL / TLS -
REQUIRE ISSUER,REQUIRE SUBJECTvàREQUIRE X509yê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-keyvàssl-certở phía máy khách (cấu hình hoặc trongmysqli_ssl_set).