MySQL untuk SSL yang dikonfigurasikan, tetapi SSL masih DISABLED ..!

9

Saya mengkonfigurasi SSL untuk MySQL menggunakan skrip berikut.

#!/bin/bash
#
mkdir -p /root/abc/ssl_certs
cd /root/abc/ssl_certs
#
echo "--> 1. Create CA cert, private key"
openssl genrsa 2048 > ca-key.pem

echo "--> 2. Create CA cert, certificate"
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

echo "--> 3. Create Server certificate, key"
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem

echo "--> 4. Create Server certificate, cert"
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
echo ""
echo 
echo ""

echo "--> 5. Create client certificate, key. Use DIFFERENT common name then server!!!!"
echo ""
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
echo "6. Create client certificate, cert"
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
exit 0

File-file berikut ini dibuat:

ca-key.pem             ca-cert.pem
server-req.pem         server-key.pem       server-cert.pem
client-req.pem         client-key.pem       client-cert.pem

Kemudian saya menggabungkan server-cert.pem dan client-cert.pem ke ca.pem (saya membaca di posting untuk melakukannya ..)

Saya membuat pengguna ssl di MySQL:

GRANT ALL ON  *.* to sslsuer@hostname IDENTIFIED BY 'pwd' REQUIRE SSL;

Selanjutnya saya menambahkan yang berikut ini di my.cnf

[mysqld]
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

Setelah me-restart server, saya terhubung ke mysql tetapi SSL masih tidak digunakan :(

mysql -u ssluser -p

SSL:                    Not in use

Bahkan parameter have_ssl masih ditampilkan dinonaktifkan .. :(

mysql> show variables like '%ssl%';
+---------------+---------------------------------------------+
| Variable_name | Value                                       |
+---------------+---------------------------------------------+
| have_openssl  | DISABLED                                    |
| have_ssl      | DISABLED                                    |
| ssl_ca        | /root/abc/ssl_certs/ca.pem          |
| ssl_capath    |                                             |
| ssl_cert      | /root/abc/ssl_certs/server-cert.pem |
| ssl_cipher    |                                             |
| ssl_key       | /root/abc/ssl_certs/server-key.pem  |
+---------------+---------------------------------------------+

Apakah saya melewatkan langkah apa pun, atau apa salahnya ..

Jawaban dengan langkah-langkah yang terlewat secara terperinci akan sangat dihargai ..

Sinar matahari
sumber
Versi OpenSSL apa yang Anda gunakan? Dan mohon aktifkan galat + peringatan logging di MySQL. Jika Anda melihat pesan kesalahan "tidak dapat membaca kunci pribadi" Anda mungkin terkena bug ini dalam beberapa cara. Membuat kunci + sertifikat baru pada sistem yang lebih lama, menggunakannya pada MySQL baru-baru ini memecahkan masalah bagi saya.
gertvdijk
@ gertvdijk Saya telah menggunakan openssl-1.0.1c. Saya memeriksa log untuk kesalahan yang disebutkan.
Sunrays
Pertama-tama. Periksa apakah mysql mendukung ssl. mysql --ssl --helpJuga jangan lupa untuk me-restart mysql setelah melakukan modifikasi pada my.cnf
Valentin Bajrami
1
@ val0x00ff ya MySQL mendukung ssl jika nilai have_ssl dinonaktifkan.
Sunrays
mencoba mysql --ssl -u ssluser -puntuk memaksa SSL pada klien. setelah bekerja, seseorang dapat mengidentifikasi mengapa REQuIRE SSL tidak.
johannes

Jawaban:

6

Lihat solusinya di sini: /ubuntu/194074/enabling-ssl-in-mysql

Anda perlu mengonversi sertifikat ke format lama:

openssl rsa -in client-key.pem -out client-key.pem
openssl rsa -in server-key.pem -out server-key.pem
Pavel Bernshtam
sumber
3

Coba periksa ini:

  • Aktifkan peringatan keluaran logging MySQL, dan baca entri log yang sebenarnya.
  • Periksa izin sistem file untuk membiarkan pengguna yang menjalankan MySQL ( mysql?) Membaca file. Dalam /rootsaya tidak berpikir itu secara default.
  • Apakah Apparmor atau SELinux mencegah MySQL untuk membaca sertifikat dan kunci?
  • Anda mungkin terkena bug jahat dari ketidakcocokan OpenSSL vs MySQL baru-baru ini. Saya tidak dapat membuat kunci di Ubuntu 12.04 yang dapat dibaca oleh MySQL, sedangkan yang saya hasilkan di Debian Squeeze berfungsi dengan baik.
gertvdijk
sumber
2

Di Ubuntu, Anda dapat memeriksa apakah apparmormemblokir akses ke file cert Anda, lihat manual .

Maka Anda harus memeriksa izin file / kepemilikan dan menambahkan hak yang diperlukan untuk /etc/apparmor.d/usr.sbin.mysqld. Lihat utas ini .

Franc Drobnič
sumber
2

Saya punya masalah ini, dan itu membantu mengubah kepemilikan pada file .pem:

chown mysql.mysql /var/lib/mysql/*.pem  (or in your case /root/abc/ssl_certs/*.pem)

(Dari Craig Wright - /ubuntu/194074/enabling-ssl-in-mysql )

btb
sumber
Ini memecahkan masalah bagi saya.
anteatersa
0

Tambahkan "ssl" di [mysqld]bagian dalam my.cnffile like

ssl
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

dan kemudian restart mysql dan periksa lagi. Itu akan berhasil.

Pratik
sumber
0

Saya percaya masalah ini disebabkan oleh fakta bahwa Anda belum menentukan jalur file untuk CA cert, kunci server, dan cert server Anda dengan benar. Itu harus dalam format berikut ...

ssl-ca=path/to/repo/mysql-directory/path/to/pem/cacert.pem
ssl-cert=path/to/repo/mysql-directory/path/to/pem/server-cert.pem
ssl-key=path/to/repo/mysql-directory/path/to/pem/server-key.pem

yaitu Anda memerlukan PATUH FILE LENGKAP dari sertifikat dan kunci dalam folder instalasi mysql Anda bukan jalur relatif '/ root /'.

Ini adalah contoh dari instalasi saya:

mysql> show variables like '%ssl%';
+---------------+----------------------------------------------------------+
| Variable_name | Value                                                    |
+---------------+----------------------------------------------------------+
| have_openssl  | YES                                                      |
| have_ssl      | YES                                                      |
| ssl_ca        | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/ca.pem         |
| ssl_capath    |                                                          |
| ssl_cert      | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-cert.pem|
| ssl_cipher    |                                                          |
| ssl_key       | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-key.pem |
+---------------+----------------------------------------------------------+

Lihat tautan berikut untuk informasi tambahan. https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-ssl.html

Josh
sumber
Jalannya dimulai dengan a /, yang berarti jalur penuh, bukan jalur relatif. /root/adalah folder home untuk pengguna root pada sistem unix.
bobpaul