MySQL'de SSL’yi etkinleştirme


24

Ubuntu Server 12.04 kullanıyorum ve SSL bağlantılarını MySQL ile etkinleştirmek istiyorum.

OpenSSL ile aşağıdaki anahtarları / certs dosyalarını oluşturdum:

  • ca-cert.pem
  • Sunucu cert.pem
  • Sunucu key.pem

Bunları sakladım /etc/mysql, sonra aşağıdaki satırları ekledik /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

Sonra sunucuyu yeniden başlattım sudo service restart mysql.

Ancak, bu SSL etkin görünmüyor. Bir mysql oturumunda:

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  |
+---------------+----------------------------+

Ne kaçırdığım hakkında bir fikrin var mı? Teşekkürler


2
Bu harika konuya bir göz atın .. Belki size yardımcı olabilir.
SirCharlo

Bağlantı SirCharlo için teşekkürler, ancak konuya değinilen sorun durumum için geçerli görünmüyor.
ziyaretçi93746

1
@SirCharlo'nun bahsettiği şey, bakmak istediğiniz yer. Özellikle Apparmor kısmı ve 10 . Debian Squeeze veya daha eski bir Ubuntu'da oluşturduğum anahtarlar gayet iyi çalışıyor - 12.04'te yeniden üretiliyorsa tekrar başarısız oluyor. MySQL hata günlüklerine de bakın.
gertvdijk

2
Ben de aynı soruyu sordum ve saatlerce harcadım, ancak @ user262116'ın cevabı bunu çözdü. Size yardım etmesi halinde bu cevabı kabul etmenizi tavsiye ederim!
elixenide

Yanıtlar:


33

Ubuntu 12.04, eski OpenSSL 0.9.8 sürümünden biraz farklı varsayılanlara sahip bir OpenSSL 1.0.1 ile birlikte gelir.

Diğer şeylerin yanı sıra, openssl req -newkey rsa:2048bir RSA anahtarı oluşturmak için kullanıyorsanız , PKCS # 8 adlı bir biçimde bir anahtarla sona erersiniz . PEM biçiminde gösterilen bu tuşlar, daha genel bir -----BEGIN PRIVATE KEY-----başlığa sahiptir ve bu, size hangi tür (RSA, DSA, EC) anahtarın olduğunu söylemez.

Önceden, OpenSSL 0.9.8 ile anahtarlar her zaman PEM olarak gösterilen PKCS # 1 adlı bir formata sahipti -----BEGIN RSA PRIVATE KEY-----.

Bu nedenle üstbilgi ve altbilgiyi basitçe değiştiremezsiniz:

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

için

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

Aynı şey değil ve işe yaramaz. Bunun yerine, anahtarı kullanarak eski biçime dönüştürmeniz gerekir openssl rsa. Bunun gibi:

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

Ubuntu 12.04'teki MySQL (v5.5.35) yaSSL (v2.2.2) adında bir SSL uygulaması kullanıyor. Anahtarların PKCS # 1 biçiminde olmasını bekler ve OpenSSL 1.0 ve daha yenileri tarafından kullanılan PKCS # 8 biçimini desteklemez. Başlık ve altbilgiyi değiştirirseniz, bu konudaki diğer yazılar tarafından önerildiği gibi, MySQL / yaSSL şikayet etmez, ancak bağlanamazsınız ve bunun gibi bir hatayla sonuçlanırsınız:

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

Ubuntu 14.04, OpenSSL 1.0.1f ve yeni ayarlarla geliyor. Diğer şeylerin yanı sıra, önceki sürümlerde kullanılan SHA1 yerine SHA256 özeti ile sertifika üretecektir. Bu arada, MySQL ile birlikte gelen yaSSL sürümü de bunu desteklemiyor.

MySQL ile kullanmak için sertifika oluşturuyorsanız, RSA anahtarlarının geleneksel PKCS # 1 PEM formatına dönüştürüldüğünden ve sertifikaların SHA1 özeti kullandığından emin olun.

İşte kendi CA'nızı, bir sunucu sertifikasını ve bir müşteri sertifikasını nasıl oluşturacağınıza bir örnek.

# 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

1
Bu yazı benim için günü kurtardı! Harika açıklama ve çözüm.
generalopinion

'HATA 2026 (HY000): SSL bağlantı hatası: ASN: gelecekteki tarihten önce'
Nitsan Baleli

Maalesef hala ERROR 2026 (HY000): SSL connection error: protocol version mismatchhatalarım var (OpenSSL 1.0.1f kullanarak). OpenSSL 1.0.1e'ye geçtim ve yukarıdaki talimatlarla çalıştı.
Jarrett

2
Bu cevap şaşırtıcı - eğer yapabilseydim büyük bir ödül olurdu. Sorunun büyük açıklaması.
elixenide

Sürüme eklemek için başka bir ses. İnternet'i dolaştırıyordum, MySQL belgesinin kurulmasının neden işe yaramayacağına dair bir çözüm bulmaya çalışıyordum - bu yazının alt kısmı günümü tamamen kurtardı.
Steve Chambers,

4

Bu bana yardımcı oldu:

Server-key.pem dosyasının üstbilgisi ve altbilgisi şöyle görünüyordu:

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

Ancak böyle bir şey gerektirir:

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

BAŞLANGIÇ RSA ÖZEL ANAHTAR Notu

Günlüğü görmek için:

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

Bu yardımcı olur umarım.


Ubunbtu 12.04'te mysql 5.5.34 ile benzer bir problem yaşadım, burada pem dosyaları herkes tarafından okunabiliyordu ve hala aynı problemi veriyordu. Ancak bu cevabı sahibi değiştirme ile birlikte hile yaptı.
Tommy Andersen

"RSA" yı manuel olarak eklemeyin - bu yalnızca hatayı bastırır, ancak SSL çalışmaz (başka bir hata alırsınız, " SSL bağlantı hatası: protokol sürümü uyuşmazlığı "). PKCS # 8’den PKCS # 1 formatına dönüştürme yerineopenssl rsa
rustyx

3

12.04'te de aynı sıkıntıları yaşadım, ama aslında sorunlara neden olan belliydi.

Ubuntu Forumlarında bir.pem dosya buldum , dosyaları taşıyarak /etc/mysqlçözdüm.

Ayrıca apparmor yapılandırmasını içinde de değiştirebilirsiniz /etc/apparmor.d/usr.sbin.mysqld.


Benim de yaşadığım sorun
Jonathan

bu bir yazım hatası mı? "pem dosyalarını taşımak" yerine "pem dosyalarını taşımak" anlamına mı geliyor? çok
bilgili

1

MySQL uygulamasını çalıştıran kullanıcının anahtarlara ve sertifika dosyalarına okuma erişimi olduğundan emin olun. MySQL'i "mysql" hesabını kullanarak başlatırsanız, şunları yaparsınız:

/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

Aksi takdirde, hata günlüğünüzde aşağıdakileri alabilirsiniz:

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

Harika. Fakat bu nasıl yapılabilir? Bir süre ayırın ve daha fazla bilgi verin, daha fazla bilgi verin :)
Lucio

Bu server-key.pem dosyasına RSA eklenmesi ile bir araya geldiğinde hile yapıldı.
Tommy Andersen

1

Ubuntu 16.04, ben ran tarihinde mysql_ssl_rsa_setup, söz konusu olarak göstermek değişkenleri dosyaları görebiliyordu ama have_sslve have_opensslolmaya devam etti DISABLED.

Çözüm oldu chown mysql.mysql /var/lib/mysql/*.pem. Alternatif olarak, mysql kullanıcısı olarak mysql_ssl_rsa_setup komutunu çalıştırırsanız, dosyaları doğru izinlere sahip olarak oluşturacağını varsayalım.


Soru dört yıl iki aydır ... OP'nin cevabınıza yanıt vermesi pek mümkün değil.
WinEunuuchs2Unix

1
Bunu sadece gelecekteki okuyucular için bir hizmet olarak yayınladım, çünkü bu sorunun en iyi google arama sonuçlarından biri ve okuduğum hiçbir şey sorunumu çözmemize yardımcı oldu. Bu cevabın değeri Ubuntu 12.04 ve hatta 14.04'teki dünyanın durumuna atıfta bulunuyor.
Craig Wright,

@ WinEunuuchs2Unix Belki OP değil, ama buradayım, neredeyse iki yıl sonra tam olarak bu cevabı arıyorum. Peki, teşekkür ederim Craig!
Oldskool

0

Özel anahtar dosyası şu şekilde görünmelidir (PKCS # 1 formatı):

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

Özel anahtarınız bununla başlıyorsa:

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

(PKCS # 8 formatı), sonra şöyle dönüştürmelisiniz :

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

Yapmayın elle "eksik" "add RSAbiçimi farklı olduğu için, elle" etiketi.


-1

SSL başlangıç ​​seçenekleri, my.cnf dosyanızın en üstünde olmalıdır, yoksa göz ardı edilebilir. SSL değişkenlerinin göz ardı edildiği RHEL 6.4'te mysql 5.6 çalıştırırken sorun yaşadım, bunları my.cnf dosyasının sonunda aldım. Onları dosyanın üstüne (hemen hemen [mysqld] altında) taşıdım, ardından sunucuyu yeniden başlattım ve her şey yolundaydı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.