Mengaktifkan SSL di MySQL

24

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

Saya telah membuat file kunci / sertifikat berikut dengan OpenSSL:

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

Saya menyimpan ini di /etc/mysql, kemudian menambahkan 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 restart 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

visitor93746
sumber
2
Lihat utas keren ini .. Mungkin ini bisa membantu Anda.
SirCharlo
Terima kasih atas tautannya, SirCharlo, tetapi masalah yang dibahas di utas itu sepertinya tidak berlaku untuk situasi saya.
visitor93746
1
Apa yang @SirCharlo sebutkan di mana Anda ingin melihatnya. Khususnya bagian Apparmor dan posting # 10 . Kunci yang saya buat pada Debian Squeeze atau Ubuntu yang lama berfungsi dengan baik - regenerasi di 12,04 membuatnya gagal lagi. Lihat log kesalahan MySQL juga.
gertvdijk
2
Saya punya pertanyaan yang sama dan menghabiskan berjam-jam di atasnya, tetapi jawaban @ user262116 menyelesaikannya. Saya mendorong Anda untuk menerima jawaban itu jika itu membantu Anda!
elixenide

Jawaban:

33

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

Antara lain, jika Anda menggunakan openssl req -newkey rsa:2048untuk menghasilkan kunci RSA, Anda akan berakhir dengan kunci dalam format yang disebut PKCS # 8 . Diwakili dalam format PEM, tombol-tombol ini memiliki -----BEGIN PRIVATE KEY-----header yang lebih umum , yang tidak memberi tahu Anda apa kunci (RSA, DSA, EC) itu.

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

Karena itu, Anda tidak dapat dengan mudah mengubah header dan footer dari:

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

untuk

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

Itu bukan hal yang sama dan itu tidak akan berhasil. Alih-alih, 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) di Ubuntu 12.04 menggunakan implementasi SSL yang disebut yaSSL (v2.2.2). Ia mengharapkan kunci berada dalam format PKCS # 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 utas 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 hadir 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 kebetulan, versi yaSSL yang dibundel dengan MySQL juga tidak mendukung ini.

Jika Anda membuat sertifikat untuk digunakan dengan MySQL, ingatlah untuk memastikan kunci RSA dikonversikan ke format PEM # PKCS # 1 tradisional dan bahwa sertifikat menggunakan pencerna SHA1.

Berikut adalah 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
pengguna262116
sumber
1
Posting ini menyelamatkan saya untuk hari ini! Penjelasan dan solusi yang fantastis.
Opini umum
Saya mendapat 'ERROR 2026 (HY000): Kesalahan koneksi SSL: ASN: sebelum tanggal di masa depan'
Nitsan Baleli
Sayangnya, saya masih mendapatkan ERROR 2026 (HY000): SSL connection error: protocol version mismatchkesalahan (menggunakan OpenSSL 1.0.1f). Saya beralih ke OpenSSL 1.0.1e dan bekerja dengan instruksi di atas.
Jarrett
2
Jawaban ini luar biasa - akan memberikan hadiah besar jika saya bisa. Penjelasan yang bagus tentang masalahnya.
elixenide
Suara lain untuk ditambahkan ke gerombolan. Telah menjelajah Internet mencoba mencari solusi mengapa pengaturan MySQL yang didokumentasikan tidak berfungsi - bagian bawah dari posting ini benar-benar menyelamatkan hari saya.
Steve Chambers
4

Ini membantu saya:

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

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

Tapi itu membutuhkan sesuatu seperti itu:

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

Catat KUNCI PRIVATE RSA BEGIN

Untuk melihat log:

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

Semoga ini membantu.

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

Saya memiliki masalah yang sama pada 12,04 tetapi sebenarnya apparmor yang menyebabkan masalah.

Saya menemukan solusi di Forum Ubuntu , memindahkan .pemfile dalam /etc/mysqlmenyelesaikannya.

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

pengguna273610
sumber
Ini adalah masalah yang saya miliki juga
Jonathan
apakah itu salah cetak? maksud Anda "memindahkan file pem ke" bukannya "memindahkan file pem"? maaf karena terlalu pedant tapi saya agak bingung
knocte
1

Pastikan bahwa pengguna yang menjalankan proses mysqld memiliki akses baca ke file kunci dan 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 yang berikut ini 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
Isabi
sumber
Besar. Tetapi 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
1

Pada Ubuntu 16.04, saya berlari mysql_ssl_rsa_setup, bisa melihat file dalam acara variabel seperti dalam pertanyaan, tapi have_ssldan have_opensslterus menjadi DISABLED.

Solusinya adalah 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.

Craig Wright
sumber
Pertanyaannya adalah empat tahun dan dua bulan ... Tidak mungkin OP akan menanggapi jawaban Anda.
WinEunuuchs2Unix
1
Saya memposting ini hanya sebagai layanan untuk pembaca masa depan karena ini adalah salah satu hasil pencarian google teratas untuk masalah ini dan tidak ada yang saya baca yang membantu menyelesaikan masalah saya. Nilai jawaban ini merujuk pada keadaan dunia di Ubuntu 12.04 dan bahkan 14.04 kehilangan relevansi.
Craig Wright
@ WinEunuuchs2Unix Mungkin bukan OP, tapi di sinilah saya, hampir dua tahun kemudian mencari jawaban ini. Jadi, terima kasih, Craig!
Oldskool
0

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 mengonversinya seperti ini:

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

Jangan menambahkan RSAtag "hilang" " secara manual dengan tangan, karena formatnya berbeda.

rustyx
sumber
-1

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

Christine
sumber