Setelah membuat sertifikat SSL yang ditandatangani sendiri, saya telah mengonfigurasi server MySQL jarak jauh saya untuk menggunakannya (dan SSL diaktifkan)
Saya ssh ke server jauh saya, dan coba sambungkan ke mysqld-nya sendiri menggunakan SSL (server MySQL adalah 5.5.25) ..
mysql -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)
Ok, saya ingat pernah membaca ada masalah dengan menghubungkan ke server yang sama melalui SSL. Jadi saya mengunduh kunci klien ke kotak lokal saya, dan menguji dari sana ...
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error
Tidak jelas apa yang dimaksud dengan galat "Sambungan SSL" ini, tetapi jika saya hilangkan -ssl-ca
, maka saya dapat terhubung menggunakan SSL ..
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.25 MySQL Community Server (GPL)
Namun, saya percaya bahwa ini hanya mengenkripsi koneksi, dan tidak benar-benar memverifikasi validitas sertifikat (artinya saya akan berpotensi rentan terhadap serangan manusia-ke-tengah)
Sertifikat SSL valid (meskipun ditandatangani sendiri), dan tidak memiliki frasa sandi. Jadi pertanyaan saya adalah, apa yang saya lakukan salah? Bagaimana saya bisa terhubung melalui SSL, menggunakan sertifikat yang ditandatangani sendiri?
Versi MySQL Server adalah 5.5.25 dan server dan klien adalah CentOS 5.
Terima kasih atas sarannya
Sunting : Perhatikan bahwa dalam semua kasus, perintah dikeluarkan dari direktori yang sama di mana tombol ssl berada (karenanya tidak ada jalur absolut)
Sunting (sebagai tanggapan terhadap mgorven):
ca.cert
adalah sertifikat Otoritas Sertifikat, yang seharusnya memberi tahu mysql bahwa otoritas sertifikat saya dipercaya.
Konfigurasi dari my.cnf
adalah
[mysqld]
ssl-ca=/etc/ssl/mysql/ca.cert
ssl-cert=/etc/ssl/mysql/server.cert
ssl-key=/etc/ssl/mysql/server.key
Saya juga mencoba menambahkan ssl-cipher=DHE-RSA-AES256-SHA
tetapi sejak itu dihapus karena tidak membantu.
ca.cert
? Apakah itu sertifikat yang ditandatangani sendiri oleh server? Apakah Anda menggunakan sertifikat klien untuk otentikasi? Harap berikan konfigurasi terkait SSL di server.Jawaban:
Ya, Anda benar bahwa jika Anda tidak menentukan
--ssl-ca
maka klien tidak memeriksa sertifikat server sama sekali. Karena berfungsi tanpa opsi itu, alasan yang paling mungkin untuk kegagalan adalah klien tidak mempercayai sertifikat server.Jika Anda menggunakan sertifikat klien dan server yang ditandatangani sendiri maka
ca.cert
file tersebut harus menyertakan kedua file ini. Dengan begitu klien akan mempercayai sertifikat server dan server akan mempercayai sertifikat klien.Misalnya:
Buat kunci server dan sertifikat:
Buat kunci dan sertifikat klien:
Gabungkan sertifikat klien dan server ke dalam file sertifikat CA:
sumber
Untuk menggunakan ssl satu arah, Anda harus mencoba dengan:
The
--ssl-cert
dan--ssl-key
pada klien mysql digunakan untuk SSL 2 cara. Ini berarti otentikasi berbasis sertifikat. Subjek sertifikat klien haruslah nama pengguna.sumber
--ssl-verify-server-cert
CN dari sertifikat server harus sama dengan host yang Anda tentukan untuk opsi baris perintah -h.Kebetulan, bukankah Anda sudah memasukkan Nama Umum yang sama untuk sertifikat server dan klien? Jika ya, ganti salah satunya sehingga Nama Umum berbeda.
sumber