Pertanyaan Mengaktifkan SSL di MySQL


Saya menjalankan Ubuntu Server 12.04, dan saya ingin mengaktifkan koneksi SSL ke MySQL.

Saya telah menghasilkan file kunci / sertifikat berikut dengan OpenSSL:

  • ca-cert.pem
  • server-cert.pem
  • server-key.pem

Saya menyimpan ini di /etc/mysql, lalu ditambahkan menambahkan baris berikut ke /etc/mysql/my.cnf:

ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

Selanjutnya, saya memulai ulang server dengan sudo service restart mysql.

Namun, ini sepertinya tidak mengaktifkan SSL. Dalam sesi mysql:

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

Ada ide apa yang saya lewatkan? Terima kasih


23
2017-09-28 14:38


asal


Lihat ini untaian mengagumkan.. Mungkin itu bisa membantumu. - SirCharlo
Terima kasih untuk tautan SirCharlo, tetapi masalah yang dibahas di utas itu sepertinya tidak berlaku untuk situasi saya. - visitor93746
Apa yang @SirCharlo sebutkan adalah di mana Anda ingin melihatnya. Khususnya bagian Apparmor dan posting # 10. Kunci yang saya buat pada Debian Squeeze atau hasil kerja Ubuntu yang lebih lama - regenerasi pada 12.04 membuatnya gagal lagi. Lihat log kesalahan MySQL juga. - gertvdijk
Saya memiliki pertanyaan yang sama dan menghabiskan berjam-jam di atasnya, tetapi jawaban @ user262116 memecahkannya. Saya akan mendorong Anda untuk menerima jawaban itu jika itu membantu Anda! - Ed Cottrell


Jawaban:


Ubuntu 12.04 hadir dengan OpenSSL 1.0.1, yang memiliki standar yang agak berbeda dari versi OpenSSL 0.9.8 yang lebih lama.

Di antara hal-hal lain, jika Anda menggunakan openssl req -newkey rsa:2048 untuk menghasilkan kunci RSA, Anda akan berakhir dengan kunci dalam format yang disebut PKC # 8. Diwakili dalam format PEM, kunci ini memiliki yang lebih umum -----BEGIN PRIVATE KEY----- tajuk, yang tidak memberi tahu Anda jenis apa (RSA, DSA, EC) kuncinya.

Sebelumnya, dengan OpenSSL 0.9.8, kunci selalu dalam format yang disebut PKC # 1, yang direpresentasikan sebagai PEM, memiliki header -----BEGIN RSA PRIVATE KEY-----.

Karena ini, Anda tidak dapat hanya mengubah header dan footer dari:

-----BEGIN PRIVATE KEY-----

untuk

-----BEGIN RSA PRIVATE KEY-----`

Itu bukan hal yang sama dan itu tidak akan berhasil. Sebagai gantinya Anda perlu mengonversi kunci ke format lama menggunakan openssl rsa. Seperti ini:

openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem

MySQL (v5.5.35) pada Ubuntu 12.04 menggunakan implementasi SSL yang disebut yaSSL (v2.2.2). Ini mengharapkan kunci untuk berada dalam format PKC # 1 dan tidak mendukung format PKCS # 8 yang digunakan oleh OpenSSL 1.0 dan yang lebih baru. Jika Anda hanya mengubah header dan footer, seperti yang disarankan oleh posting lain di thread ini, MySQL / yaSSL tidak akan mengeluh, tetapi Anda tidak akan dapat terhubung dan malah berakhir dengan kesalahan seperti ini:

ERROR 2026 (HY000): SSL connection error: protocol version mismatch

Ubuntu 14.04 dilengkapi dengan OpenSSL 1.0.1f dan pengaturan baru. Antara lain, itu akan menghasilkan sertifikat dengan SHA256 mencerna bukannya SHA1, yang digunakan dalam versi sebelumnya. Secara tidak langsung, versi yaSSL yang dibundel dengan MySQL tidak mendukung ini juga.

Jika Anda menghasilkan sertifikat untuk digunakan dengan MySQL, ingatlah untuk memastikan kunci RSA dikonversi ke format PKCS # 1 PEM tradisional dan sertifikat tersebut menggunakan SHA1 dicerna.

Berikut ini contoh cara menghasilkan CA Anda sendiri, sertifikat server, dan sertifikat klien.

# Generate a CA key and certificate with SHA1 digest
openssl genrsa 2048 > ca-key.pem
openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem

# Create server key and certficate with SHA1 digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -sha1 -req -in server-req.pem -days 730  -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
openssl rsa -in server-key.pem -out server-key.pem

# Create client key and certificate with SHA digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem > client-req.pem
openssl x509 -sha1 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
openssl rsa -in client-key.pem -out client-key.pem

33
2018-03-26 03:26



Posting ini menyelamatkan hari untukku! Penjelasan dan solusi yang fantastis. - generalopinion
Saya mendapat 'ERROR 2026 (HY000): Kesalahan koneksi SSL: ASN: sebelum tanggal di masa mendatang' - Nitsan Baleli
Sayangnya, saya masih punya ERROR 2026 (HY000): SSL connection error: protocol version mismatch kesalahan (menggunakan OpenSSL 1.0.1f). Saya beralih ke OpenSSL 1.0.1e dan bekerja dengan instruksi di atas. - Jarrett
Jawaban ini luar biasa - akan memberikan hadiah besar jika saya bisa. Penjelasan hebat tentang masalah ini. - Ed Cottrell
Suara lain untuk ditambahkan ke gerombolan. Telah menjaring internet mencoba untuk menemukan solusi mengapa didokumentasikan MySQL mengatur tidak akan berhasil - bagian bawah posting ini benar-benar menyelamatkan hariku. - Steve Chambers


Ini membantu saya:

Header dan footer dari file server-key.pem tampak seperti itu:

-----BEGIN PRIVATE KEY-----
...
...
-----END PRIVATE KEY-----

Tetapi membutuhkan sesuatu seperti itu:

-----BEGIN RSA PRIVATE KEY-----
...
...
-----END RSA PRIVATE KEY-----

Perhatikan BEGIN RSA KUNCI PRIBADI

Untuk melihat log:

sudo vim /var/log/mysql/error.log

Semoga ini membantu.


4
2017-09-19 22:22



Saya memiliki masalah yang sama di Ubunbtu 12.04 saya dengan mysql 5.5.34, di mana semua file pem dapat dibaca oleh semua dan masih memberi saya masalah yang sama. Tetapi jawaban ini dikombinasikan dengan mengubah pemilik melakukan trik. - Tommy Andersen
Jangan tambahkan "RSA" secara manual - ini hanya akan menekan kesalahan, tetapi SSL tidak berfungsi (Anda akan mendapatkan kesalahan lain, "Kesalahan koneksi SSL: versi protokol tidak cocok"). Konversikan dari PKCS # 8 ke format PKCS # 1 sebagai gantinya openssl rsa - rustyx


Saya memiliki masalah yang sama pada 12.04 tetapi sebenarnya apparmorlah yang menyebabkan masalah.

saya menemukan solusi di Forum Ubuntu, bergerak .pem file dalam /etc/mysql menyelesaikannya.

Anda juga dapat mengubah konfigurasi apparmor di /etc/apparmor.d/usr.sbin.mysqld.


2
2018-04-24 12:49



Ini adalah masalah yang saya miliki juga - Jonathan
apakah itu salah ketik? maksudmu "memindahkan pem file ke" bukannya "memindahkan file pem dalam"? maaf karena begitu pedant tapi saya agak bingung - knocte


Pastikan bahwa pengguna yang menjalankan proses mysqld telah membaca akses ke kunci dan file sertifikat. Jika Anda meluncurkan MySQL menggunakan akun "mysql", Anda akan:

/etc/mysql$ chown mysql:mysql *.pem
/etc/mysql$ ls -l *.pem
-rwxrwx--- 1 mysql mysql 1631 2013-09-16 14:27 ca-cert.pem
-rwxrwx--- 1 mysql mysql 1281 2013-09-16 14:27 server-cert.pem
-rwxrwx--- 1 mysql mysql 1679 2013-09-16 14:27 server-key.pem

Jika tidak, Anda mungkin mendapatkan hal-hal berikut di log kesalahan Anda:

SSL error: Unable to get certificate from '/etc/mysql/server-cert.pem'
130916 13:32:25 [Warning] Failed to setup SSL
130916 13:32:25 [Warning] SSL error: Unable to get certificate

1
2017-09-17 19:56



Besar. Tapi bagaimana ini bisa dilakukan? Luangkan waktu dan jelaskan lebih lanjut, berikan lebih banyak informasi :) - Lucio
Ini dikombinasikan dengan menambahkan RSA ke file server-key.pem melakukan trik. - Tommy Andersen


File kunci pribadi akan terlihat seperti (format PKCS # 1):

-----BEGIN RSA PRIVATE KEY-----
. . .
-----END RSA PRIVATE KEY-----

Jika kunci pribadi Anda dimulai dengan:

-----BEGIN PRIVATE KEY-----

(Format PKCS # 8), maka Anda harus mengubahnya seperti ini:

openssl rsa -in server-key.pem -out server-key.pem

Jangan menambahkan "missing" secara manualRSA"tag dengan tangan, karena formatnya berbeda.


0
2017-08-07 08:12





Pada Ubuntu 16.04, saya berlari mysql_ssl_rsa_setup, bisa melihat file dalam variabel acara seperti pada pertanyaan, tapi have_ssl dan have_openssl terus berlanjut DISABLED.

Solusinya adalah untuk chown mysql.mysql /var/lib/mysql/*.pem. Atau, saya berasumsi jika Anda menjalankan mysql_ssl_rsa_setup sebagai pengguna mysql, itu akan membuat file dengan izin yang benar.


0
2017-12-13 00:04



Pertanyaannya adalah empat tahun dan dua bulan ... Tidak mungkin OP akan menanggapi jawaban Anda. - WinEunuuchs2Unix
Saya memposting ini hanya sebagai layanan untuk pembaca masa depan karena ini adalah salah satu hasil pencarian google atas untuk masalah ini dan tidak ada yang saya baca membantu memecahkan masalah saya. Nilai jawaban ini mengacu pada keadaan dunia di Ubuntu 12.04 dan bahkan 14.04 kehilangan relevansi. - Craig Wright


Opsi startup SSL harus berada di dekat bagian atas file my.cnf Anda atau mereka mungkin diabaikan. Saya memiliki masalah menjalankan mysql 5.6 pada RHEL 6.4 di mana variabel-variabel SSL diabaikan, saya memilikinya di akhir file my.cnf. Saya memindahkan mereka di bagian atas file (tepat di bawah [mysqld]) kemudian saya me-restart server dan semuanya baik-baik saja.


-1
2017-09-24 18:04