Di sini PHP (dan mysqli_real_connect ) adalah klien bukan server. Anda mengonfigurasinya dengan mysqli_ssl_set untuk otentikasi sertifikat klien (dan menggunakan kunci server dan sertifikat).
Saya tidak yakin bagaimana Anda mengonfigurasi server MySQL Anda, tetapi seharusnya ada sesuatu seperti ini di bagian server (MySQL) dari konfigurasi:
ssl-key=/mysql-ssl-certs/server-key.pem
ssl-cert=/mysql-ssl-certs/server-cert.pem
ssl-ca=/mysql-ssl-certs/ca-cert.pem
Ini bukan milik sisi klien (hanya sertifikat CA yang memilikinya, tapi jelas bukan kunci pribadi server).
Setelah Anda selesai melakukannya, Anda dapat mencoba melihat apakah server dikonfigurasi dengan benar menggunakan klien baris perintah:
mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
atau mungkin ini (walaupun verifikasi server cert harus benar-benar diaktifkan agar SSL/TLS berguna)
mysql --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
Ini harus bekerja setidaknya pada baris perintah.
Kemudian, dari PHP, Anda mendapatkan dua opsi:
- gunakan
mysqli_ssl_setseperti yang telah Anda lakukan, tetapi meninggalkan$keydan$certnull, kecuali jika Anda ingin menggunakan sertifikat klien yang seharusnya berbeda dari sertifikat server Anda. (Saya tidak ingat apakah itu berhasil.) -
mungkin lebih mudah, hilangkan
mysqli_ssl_setsemuanya dan konfigurasikan ini di file konfigurasi klien MySQL global Anda (di mana PHP seharusnya dapat mengambilnya, mungkin/etc/mysql/my.cnf, tetapi ini dapat bervariasi tergantung pada distribusi Anda):[client] ssl-ca=/mysql-ssl-certs/ca-cert.pem
(Ini mirip dengan konfigurasi server, tetapi di sisi klien/di bagian klien.)
Untuk bagian otorisasi (GRANT ):
REQUIRE SSLhanya membutuhkan penggunaan SSL/TLSREQUIRE ISSUER,REQUIRE SUBJECTdanREQUIRE X509mengharuskan klien untuk menunjukkan sertifikat klien untuk membandingkan dengan nilai yang diperlukan (itulah kasus di mana Anda harus menggunakanssl-keydanssl-certdi sisi klien (config atau di dalammysqli_ssl_set).