Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Koneksi SSL PHP ke MySQL

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/TLS
  • REQUIRE ISSUER , REQUIRE SUBJECT dan REQUIRE X509 mengharuskan klien untuk menunjukkan sertifikat klien untuk membandingkan dengan nilai yang diperlukan (itulah kasus di mana Anda harus menggunakan ssl-key dan ssl-cert di sisi klien (config atau di dalam mysqli_ssl_set ).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah injeksi SQL sebenarnya dimungkinkan dengan menambahkan kueri kedua?

  2. penggunaan auto_increment dalam kunci komposit

  3. Pertempuran pengkodean karakter UTF-8 json_encode()

  4. Masukkan data dari tabel lain dengan loop di mysql

  5. Laravel 5.1 - Memeriksa Koneksi Database