กำหนดค่า MySQL สำหรับ SSL แต่ SSL ยังคงปิดการใช้งาน .. !


9

ฉันกำหนดค่า SSL สำหรับ MySQL โดยใช้สคริปต์ต่อไปนี้

#!/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

ไฟล์ต่อไปนี้ถูกสร้างขึ้น:

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

จากนั้นฉันก็รวม server-cert.pem และ client-cert.pem เข้าใน ca.pem (ฉันอ่านในโพสต์เพื่อทำ .. )

ฉันสร้างผู้ใช้ ssl ใน MySQL:

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

ต่อไปฉันเพิ่มสิ่งต่อไปนี้ใน 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

หลังจากรีสตาร์ทเซิร์ฟเวอร์ฉันเชื่อมต่อกับ mysql แต่ SSL ยังไม่ได้ใช้งาน :(

mysql -u ssluser -p

SSL:                    Not in use

แม้พารามิเตอร์ has_ssl ก็ยังคงแสดงปิดใช้งาน .. :(

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

ฉันพลาดขั้นตอนใดไปหรือว่ามีอะไรผิดปกติ ..

คำตอบที่พลาดขั้นตอนโดยละเอียดจะได้รับการชื่นชมอย่างมาก ..


คุณใช้ OpenSSL เวอร์ชันใดอยู่ และโปรดเปิดใช้งานการบันทึกข้อผิดพลาด + คำเตือนใน MySQL หากคุณเห็นข้อความแสดงข้อผิดพลาด "ไม่สามารถอ่านคีย์ส่วนตัว" ได้คุณอาจได้รับข้อผิดพลาดบางประการ การสร้างคีย์ + certs ใหม่ในระบบเก่าโดยใช้คีย์เหล่านี้ใน MySQL เมื่อเร็ว ๆ นี้แก้ปัญหาให้ฉัน
gertvdijk

@gertvdijk ฉันใช้ openssl-1.0.1c ฉันกำลังตรวจสอบบันทึกสำหรับข้อผิดพลาดที่กล่าวถึง
Sunrays

ก่อนอื่นเลย ตรวจสอบว่า mysql รองรับ ssl mysql --ssl --helpนอกจากนี้อย่าลืมรีสตาร์ท mysql หลังจากทำการแก้ไขกับ my.cnf
Valentin Bajrami

1
@ val0x00ff ใช่ MySQL รองรับ ssl หากค่า has_ssl ถูกปิดใช้งาน
Sunrays

พยายามmysql --ssl -u ssluser -pบังคับใช้ SSL กับไคลเอ็นต์ หลังจากนั้นทำงานหนึ่งสามารถ trto ระบุว่าทำไม REQUIRE SSL ไม่
โยฮันเนส

คำตอบ:



3

ลองตรวจสอบสิ่งนี้:

  • เปิดใช้งานการบันทึกเอาท์พุทคำเตือนของ MySQL และอ่านรายการบันทึกจริงเหล่านั้น
  • ตรวจสอบการอนุญาตของระบบไฟล์เพื่อให้ผู้ใช้ที่ MySQL ทำงาน ( mysql?) อ่านไฟล์ ใน/rootผมไม่คิดว่ามันมีค่าเริ่มต้น
  • Apparmor หรือ SELinux ป้องกันไม่ให้ MySQL อ่าน certs และกุญแจ?
  • คุณอาจโดนบั๊กที่น่ารังเกียจของ OpenSSL vs. MySQL ที่เข้ากันไม่ได้ ฉันไม่สามารถสร้างคีย์บน Ubuntu 12.04 ซึ่ง MySQL สามารถอ่านได้ในขณะที่สิ่งที่ฉันสร้างบน Debian Squeeze ทำงานได้ดี

2

บน Ubuntu คุณอาจตรวจสอบว่าapparmorการเข้าถึงบล็อกไฟล์ใบรับรองของคุณดูคู่มือการใช้งาน

จากนั้นคุณควรตรวจสอบสิทธิ์ของแฟ้ม / /etc/apparmor.d/usr.sbin.mysqldเป็นเจ้าของและการเพิ่มสิทธิ์ที่จำเป็น ดูกระทู้นี้


2

ฉันมีปัญหานี้และมันช่วยเปลี่ยนความเป็นเจ้าของในไฟล์. pem:

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

(จาก Craig Wright - /ubuntu/194074/enabling-ssl-in-mysql )


วิธีนี้แก้ไขปัญหาสำหรับฉัน
anteatersa

0

เพิ่ม "ssl" ใน[mysqld]ส่วนของmy.cnfไฟล์เช่น

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

จากนั้นรีสตาร์ท mysql แล้วตรวจสอบอีกครั้ง มันจะทำงาน.


0

ฉันเชื่อว่าปัญหานี้เกิดจากข้อเท็จจริงที่ว่าคุณไม่ได้ระบุพา ธ ของไฟล์สำหรับใบรับรอง CA, คีย์เซิร์ฟเวอร์และใบรับรองเซิร์ฟเวอร์อย่างถูกต้อง ต้องอยู่ในรูปแบบต่อไปนี้ ...

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

เช่นคุณต้องการเส้นทางไฟล์เต็มของ certs และกุญแจในโฟลเดอร์การติดตั้ง mysql ไม่ใช่พา ธ '/ root /' ที่สัมพันธ์กัน

นี่คือตัวอย่างจากการติดตั้งของฉัน:

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

อ้างถึงลิงค์ต่อไปนี้สำหรับข้อมูลเพิ่มเติม https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-ssl.html


เส้นทางของเขาเริ่มต้นด้วย a /ซึ่งหมายความว่าพวกเขาเป็นเส้นทางแบบเต็มไม่ใช่เส้นทางที่สัมพันธ์กัน /root/เป็นโฮมโฟลเดอร์สำหรับผู้ใช้รูทบนระบบยูนิกซ์
bobpaul
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.