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_set
seperti yang telah Anda lakukan, tetapi meninggalkan$key
dan$cert
null, 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_set
semuanya 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 SSL
hanya membutuhkan penggunaan SSL/TLSREQUIRE ISSUER
,REQUIRE SUBJECT
danREQUIRE X509
mengharuskan klien untuk menunjukkan sertifikat klien untuk membandingkan dengan nilai yang diperlukan (itulah kasus di mana Anda harus menggunakanssl-key
danssl-cert
di sisi klien (config atau di dalammysqli_ssl_set
).