MySQL में SSL को सक्षम करना


24

मैं Ubuntu सर्वर 12.04 चला रहा हूं, और मैं SSL कनेक्शन को MySQL में सक्षम करना चाहता हूं।

मैंने OpenSSL के साथ निम्नलिखित कुंजियाँ / सीरेट्स फाइलें तैयार की हैं:

  • ca-cert.pem
  • सर्वर-cert.pem
  • सर्वर-key.pem

मैंने इन्हें यहाँ संग्रहीत किया /etc/mysql, फिर निम्न पंक्तियों को इसमें जोड़ा गया /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

अगला, मैंने सर्वर को फिर से शुरू किया sudo service restart mysql

हालाँकि, यह SSL सक्षम करने के लिए प्रतीत नहीं होता है। एक 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  |
+---------------+----------------------------+

कोई भी विचार जो मुझे याद आ रहा है? धन्यवाद


2
इस भयानक धागे की जाँच करें .. शायद यह आपकी मदद कर सकता है।
SirCharlo

लिंक SirCharlo के लिए धन्यवाद, लेकिन उस धागे में संबोधित मुद्दा मेरी स्थिति पर लागू नहीं होता है।
आगंतुक 93746

1
क्या @SirCharlo का उल्लेख है जहां आप देखना चाहते हैं। विशेष रूप से अपीयर भाग और # 10 पोस्ट करें । कुंजी जो मैंने डेबियन स्क्वीज़ या पुराने उबंटू काम पर ठीक की है - 12.04 में पुन: उत्पन्न करने से यह फिर से विफल हो जाती है। MySQL त्रुटि लॉग को भी देखें।
gertvdijk 10

2
मेरा भी यही सवाल था और इस पर घंटों बिताए, लेकिन @ user262116 के जवाब ने इसे हल कर दिया। अगर आपने इसकी मदद की तो मैं आपको उस उत्तर को स्वीकार करने के लिए प्रोत्साहित करूँगा!
17 अगस्त को elixenide

जवाबों:


33

Ubuntu 12.04 एक OpenSSL 1.0.1 के साथ आता है, जिसमें पुराने OpenSSL 0.9.8 संस्करण की तुलना में कुछ अलग चूक हैं।

अन्य बातों के अलावा, यदि आप openssl req -newkey rsa:2048RSA कुंजी बनाने के लिए उपयोग कर रहे हैं, तो आप PKCS # 8 नामक एक प्रारूप में एक कुंजी के साथ समाप्त करेंगे । पीईएम प्रारूप में प्रस्तुत की गई, इन कुंजियों में अधिक सामान्य -----BEGIN PRIVATE KEY-----हेडर है, जो आपको यह नहीं बताता है कि यह किस तरह (आरएसए, डीएसए, ईसी) कुंजी है।

पहले, OpenSSL 0.9.8 के साथ, चाबियाँ हमेशा PKCS # 1 नामक एक प्रारूप में होती थीं , जिसे PEM के रूप में दर्शाया गया था, जिसमें हेडर था -----BEGIN RSA PRIVATE KEY-----

इस वजह से आप केवल हेडर और पाद लेख को बदल नहीं सकते हैं:

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

सेवा मेरे

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

यह एक ही बात नहीं है और यह काम नहीं करेगा। इसके बजाय आपको कुंजी का उपयोग करके पुराने प्रारूप में कनवर्ट करना होगा openssl rsa। ऐशे ही:

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

Ubuntu 12.04 पर MySQL (v5.5.35) एक SSL कार्यान्वयन का उपयोग कर रहा है जिसे yaSSL (v2.2.2) कहा जाता है। यह उम्मीद करता है कि चाबियाँ PKCS # 1 प्रारूप में होंगी और OpenSSL 1.0 और नए द्वारा उपयोग किए जाने वाले PKCS # 8 प्रारूप का समर्थन नहीं करता है। यदि आप केवल हेडर और फ़ूटर को बदलते हैं, जैसा कि इस थ्रेड में अन्य पोस्ट द्वारा सुझाया गया है, तो MySQL / yaSSL शिकायत नहीं करेगा, लेकिन आप कनेक्ट करने में असमर्थ होंगे और इसके बजाय इस तरह से एक त्रुटि के साथ समाप्त होगा:

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

Ubuntu 14.04 OpenSSL 1.0.1f और नई सेटिंग्स के साथ आता है। अन्य बातों के अलावा, यह SHA1 के बजाय SHA256 डिजेस्ट के साथ प्रमाण पत्र उत्पन्न करेगा, जिसका उपयोग पहले संस्करणों में किया गया था। गोपनीय रूप से, MySQL के साथ बंडल किया गया yaSSL संस्करण इस बात का समर्थन नहीं करता है।

यदि आप MySQL के साथ उपयोग करने के लिए प्रमाण पत्र उत्पन्न कर रहे हैं, तो सुनिश्चित करें कि RSA कुंजियाँ पारंपरिक PKCS # 1 PEM प्रारूप में परिवर्तित हो गई हैं और यह कि SHA1 डाइजेस्ट का उपयोग कर प्रमाण पत्र बनाए गए हैं।

यहां एक उदाहरण दिया गया है कि कैसे अपना खुद का सीए, एक सर्वर प्रमाणपत्र और एक क्लाइंट प्रमाणपत्र तैयार किया जाए।

# 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
इस पोस्ट ने मेरे लिए दिन बचा लिया! विलक्षण व्याख्या और समाधान।
2

मुझे 'ERROR 2026 (HY000): एसएसएल कनेक्शन त्रुटि: ASN: भविष्य में तारीख से पहले'
नितिन बेली

दुर्भाग्य से, मुझे अभी भी ERROR 2026 (HY000): SSL connection error: protocol version mismatchत्रुटियाँ मिली हैं (OpenSSL 1.0.1f का उपयोग करके)। मैंने OpenSSL 1.0.1e पर स्विच किया और यह उपरोक्त निर्देशों के साथ काम करता है।
जरेट

2
यह जवाब आश्चर्यजनक है - अगर मैं कर सकता तो एक बड़े इनाम का पुरस्कार देता। समस्या की महान व्याख्या।
एलिक्सनाइड

भीड़ में जोड़ने के लिए एक और आवाज। MySQL डॉक्यूमेंटेड सेट अप सिर्फ काम नहीं करेगा - क्यों इस पोस्ट का निचला हिस्सा पूरी तरह से मेरे दिन को बचाया एक समाधान खोजने के लिए इंटरनेट का प्रयास कर रहा है।
स्टीव चेम्बर्स

4

इससे मुझे मदद मिली:

हेडर और फाइल सर्वर का keyer -pem इस तरह दिखता है:

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

लेकिन इसके लिए कुछ इस तरह की आवश्यकता होती है:

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

BEGIN RSA निजी कुंजी पर ध्यान दें

लॉग देखने के लिए:

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

उम्मीद है की यह मदद करेगा।


मुझे अपने Ubunbtu 12.04 में mysql 5.5.34 के साथ एक समान समस्या थी, जहां पेम की फाइलें सभी ने पढ़ी थीं और फिर भी मुझे वही समस्या दी। लेकिन मालिक को बदलने के साथ संयुक्त इस जवाब ने चाल चली।
टॉमी एंडरसन

"आरएसए" को मैन्युअल रूप से न जोड़ें - यह केवल त्रुटि को दबाएगा, लेकिन एसएसएल काम नहीं करेगा (आपको एक और त्रुटि, " एसएसएल कनेक्शन त्रुटि: प्रोटोकॉल संस्करण बेमेल " मिलेगी )। PKCS # 8 से PKCS # 1 प्रारूप का उपयोग करने के बजाय कन्वर्ट करेंopenssl rsa
rustyx

3

मुझे 12.04 पर समान परेशानी हुई थी, लेकिन यह वास्तव में चिंता का कारण था।

मुझे उबंटू फ़ोरम में एक हल मिला , .pemफाइलों को /etc/mysqlहल करते हुए।

आप में apparmor विन्यास भी बदल सकते हैं /etc/apparmor.d/usr.sbin.mysqld


यही समस्या मेरे पास भी थी
जोनाथन

क्या वह टाइपो है? क्या आप का अर्थ है "चलती pem फाइलें" के बजाय "चलती pem फाइलें"? इतना
कठिन

1

सुनिश्चित करें कि mysqld प्रक्रिया चलाने वाले उपयोगकर्ता ने कुंजियों और प्रमाणपत्र फ़ाइलों तक पहुंच पढ़ ली है। यदि आप "mysql" खाते का उपयोग करके MySQL लॉन्च करते हैं, तो आप निम्न करेंगे:

/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

अन्यथा, आपको अपनी त्रुटि लॉग में निम्नलिखित मिल सकता है:

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

महान। लेकिन यह कैसे किया जा सकता है? एक समय लें और अधिक जानकारी देते हुए आगे बताएं :)
लुसियो

यह सर्वर- key.pem फ़ाइल के लिए RSA को जोड़ने के साथ संयुक्त है।
टॉमी एंडरसन

1

उबंटू 16.04, मैं भाग गया पर mysql_ssl_rsa_setup, सवाल में शो को चर में फ़ाइलों को देख सकते हैं, लेकिन have_sslऔर have_opensslबना रहा DISABLED

का समाधान था chown mysql.mysql /var/lib/mysql/*.pem। वैकल्पिक रूप से, मुझे लगता है कि यदि आप mysql_ssl_rsa_setup को mysql उपयोगकर्ता के रूप में चलाते हैं, तो यह सही अनुमतियों के साथ फाइलें बनाएगा।


सवाल चार साल और दो महीने पुराना है ... यह संभावना नहीं है कि ओपी आपके जवाब का जवाब देगा।
विनयुनुच्स

1
मैंने इसे केवल भविष्य के पाठकों के लिए एक सेवा के रूप में पोस्ट किया क्योंकि यह इस समस्या के लिए शीर्ष Google खोज परिणामों में से एक है और मैंने जो कुछ भी नहीं पढ़ा वह मेरी समस्या को हल करने में मदद करता है। इस उत्तर का मान उबंटू की दुनिया में 12.04 और यहां तक ​​कि 14.04 के संदर्भ में प्रासंगिकता खो रहा है।
क्रेग राइट

@ WinEunuuchs2Unix शायद ओपी नहीं है, लेकिन यहां मैं हूं, लगभग दो साल बाद बिल्कुल इस जवाब की तलाश में। तो, धन्यवाद क्रेग!
ओल्डस्कूल

0

निजी कुंजी फ़ाइल की तरह दिखना चाहिए (PKCS # 1 प्रारूप):

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

यदि आपकी निजी कुंजी इसके साथ शुरू होती है:

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

(PKCS # 8 प्रारूप), तो आपको इसे इस तरह बदलना चाहिए :

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

RSAहाथ से "लापता" "टैग को मैन्युअल रूप से जोड़ें , क्योंकि प्रारूप अलग है।


-1

SSL स्टार्टअप विकल्प आपकी my.cnf फ़ाइल के शीर्ष के पास होना चाहिए या उन्हें अनदेखा किया जा सकता है। मुझे RHEL 6.4 पर mysql 5.6 चलाने में समस्याएँ आईं, जहाँ SSL चरों को नजरअंदाज किया जा रहा था, मैंने उन्हें my.cnf फ़ाइल के अंत में दिया था। मैंने उन्हें फ़ाइल के शीर्ष पर ले जाया (नीचे [mysqld]) फिर मैंने सर्वर को फिर से शुरू किया और सब कुछ ठीक था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.