Score:2

Mysql 8.0 พร้อม Letsencrypt SSL บน Ubuntu 20.4

ธง ht

ฉันติดตั้งใบรับรอง Letsencrypt SSL บนเซิร์ฟเวอร์ Ubuntu 20.4 VPN และใช้งานได้ ตอนนี้ ฉันกำลังพยายามกำหนดค่า mysql บนเซิร์ฟเวอร์นี้สำหรับ SSL ฉันอ่านโพสต์ที่เกี่ยวข้องจำนวนมากที่จัดการกับปัญหาเดียวกัน และฉันใช้เวลาหลายชั่วโมงเพื่อแก้ไขปัญหานี้ แต่ก็ไม่สำเร็จ

นี่คือขั้นตอนที่ฉันทำ:

  • ฉันคัดลอกไฟล์ cert.pem, chain.pem, fullchain.pem และ privkey.pem ลงใน /var/lib/mysql ไฟล์เหล่านี้เป็นไฟล์เดียวกันกับที่ฉันใช้สำหรับการกำหนดค่า SSL ของฉัน โดเมน.

  • การกำหนดค่าใน mysql ไม่ชัดเจน ฉันลองใช้ชุดค่าผสมต่างๆ ใน ​​[mysql] และ [mysqld] สิ่งที่ฉันคาดว่าจะถูกต้องไม่ทำงาน: ssl_ca=/var/lib/mysql/cert.pem,ssl_cert=/var/lib/mysql/chain.pem,ssl_key=/var/lib/mysql/privkey.pem

    เฉพาะการกำหนดค่านี้เท่านั้นที่ทำงานโดยไม่มีข้อผิดพลาด หมายเหตุ: fullchain.pem มีใบรับรองจาก cert.pem และ chain.pem ใน /etc/mysql/mysql.conf.d:

    [มายเอสคิวลด์]
    
    ssl_cert=/var/lib/mysql/fullchain.pem
    
    ssl_key=/var/lib/mysql/privkey.pem
    

ฉันสามารถเชื่อมต่อกับ mysql ในเครื่องจากเซิร์ฟเวอร์ของฉัน และเมื่อตรวจสอบแอตทริบิวต์ ssl ฉันจะได้รับ:

(ฉันแสดงรายการเฉพาะตัวแปรที่มีค่า )

| ชื่อตัวแปร | ค่า |
+--------------------------------------+-------------- -------------------+
| have_openssl | ใช่ |                       
| have_ssl | ใช่ |
| performance_schema_show_processlist | ปิด |
| ssl_cert | /var/lib/mysql/fullchain.pem | |
| ssl_fips_mode | ปิด |
| ssl_key | /var/lib/mysql/privkey.pem 

เมื่อฉันวิ่ง มายเอสคิวแอล > \s, ฉันเข้าใจ:

mysql Ver 8.0.21 สำหรับ Win64 บน x86_64 (เซิร์ฟเวอร์ชุมชน MySQL - GPL)

รหัสการเชื่อมต่อ: 66
ฐานข้อมูลปัจจุบัน:
ผู้ใช้ปัจจุบัน: someUser@someIP
SSL: รหัสที่ใช้คือ TLS_AES_256_GCM_SHA384
ใช้ตัวคั่น: ;
เวอร์ชันเซิร์ฟเวอร์: 8.0.26-0ubuntu0.20.04.3 (Ubuntu)
รุ่นโปรโตคอล: 10
การเชื่อมต่อ: maraxai.de ​​ผ่าน TCP/IP
ชุดอักขระเซิร์ฟเวอร์: utf8mb4
ชุดอักขระ Db: utf8mb4
ชุดอักขระไคลเอนต์: cp850
Conn. ชุดอักขระ: cp850
พอร์ต TCP: 3306
ข้อมูลไบนารีเป็น: เลขฐานสิบหก

เมื่อฉันวิ่ง $ openssl s_client -เชื่อมต่อ maraxai.de:3306 -ชื่อเซิร์ฟเวอร์ maraxai.deฉันคาดว่าจะได้รับผลลัพธ์เช่นเดียวกับ $ openssl s_client -เชื่อมต่อ maraxai.de:443 -ชื่อเซิร์ฟเวอร์ maraxai.deนั่นคือห่วงโซ่ใบรับรองที่สมบูรณ์พร้อมการจับมือกันที่ประสบความสำเร็จ แต่ฉันกลับได้รับ:

139990121219392:ข้อผิดพลาด:1408F10B:รูทีน SSL:ssl3_get_record:หมายเลขเวอร์ชันไม่ถูกต้อง:../ssl/record/ssl3_record.c:331:
---
ไม่มีใบรับรองเพื่อน
---
ไม่มีการส่งชื่อ CA ของใบรับรองไคลเอ็นต์
---
SSL handshake อ่าน 5 ไบต์และเขียน 302 ไบต์
การยืนยัน: ตกลง
---
ใหม่ (ไม่มี) รหัสคือ (ไม่มี)
ไม่สนับสนุนการเจรจาใหม่อย่างปลอดภัย
การบีบอัด: ไม่มี
การขยายตัว: ไม่มี
ไม่มีการเจรจา ALPN
ข้อมูลต้นไม่ได้ถูกส่ง
ตรวจสอบรหัสส่งคืน: 0 (ตกลง)

บางกระทู้แนะนำว่าสาย SSL handshake อ่าน 5 ไบต์และเขียน 302 ไบต์ แสดงให้เห็นว่าการจับมือ SSL เริ่มต้นขึ้นแล้ว แต่ถูกยกเลิกเนื่องจากเซิร์ฟเวอร์ส่งคืนสิ่งที่ไม่คาดคิด

เพื่อตรวจสอบเพิ่มเติมฉันใช้ openssl s_client -เชื่อมต่อ maraxai.de:3306 -ชื่อเซิร์ฟเวอร์ maraxai.de ​​-starttls mysql. ส่วนแรกบอกฉันเกี่ยวกับ ข้อผิดพลาด: num=20: ไม่สามารถรับใบรับรองผู้ออกในท้องถิ่น และ ข้อผิดพลาด: num=21: ใบรับรองเซิร์ฟเวอร์ไม่ได้รับการยืนยัน สำหรับใบรับรองเซิร์ฟเวอร์ (ความลึก:0). นอกจากนี้ ฉันเห็นเพียงหนึ่งใบรับรอง (cert.pem) ใบรับรองระดับกลางของ chain.pem ไม่อยู่ในรายการ มันแปลกเพราะฉันใช้ fullchain.pem ซึ่งเป็นการเชื่อมใบรับรองใน chain.pem และ cert.pem

เชื่อมต่อแล้ว(00000003)
ความลึก=0 CN = maraxai.de
ตรวจสอบข้อผิดพลาด: num=20: ไม่สามารถรับใบรับรองผู้ออกในท้องถิ่น
ตรวจสอบผลตอบแทน:1
ความลึก=0 CN = maraxai.de
ตรวจสอบข้อผิดพลาด:num=21:ไม่สามารถตรวจสอบใบรับรองแรก
ตรวจสอบผลตอบแทน:1
---
ห่วงโซ่ใบรับรอง
 0 วินาที:CN = maraxai.de
   i:C = US, O = Let's Encrypt, CN = R3
---
ใบรับรองเซิร์ฟเวอร์
-----เริ่มต้นใบรับรอง-----
//มิฟ...
-----จบใบรับรอง-----
เรื่อง=CN = maraxai.de

ผู้ออก = C = US, O = Let's Encrypt, CN = R3

---
ไม่มีการส่งชื่อ CA ของใบรับรองไคลเอ็นต์
อัลกอริทึมลายเซ็นที่ร้องขอ: ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384: RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512:ECDSA+SHA224:RSA+SHA224
อัลกอริทึมลายเซ็นที่ขอร่วมกัน: ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384 :RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512
สรุปการลงนามเพียร์: SHA256
ประเภทลายเซ็นเพียร์: RSA-PSS
คีย์อุณหภูมิเซิร์ฟเวอร์: X25519, 253 บิต
---
SSL handshake อ่าน 2027 ไบต์และเขียน 448 ไบต์
ข้อผิดพลาดในการยืนยัน: ไม่สามารถตรวจสอบใบรับรองใบแรกได้
---
ใหม่ TLSv1.3 การเข้ารหัสคือ TLS_AES_256_GCM_SHA384
รหัสสาธารณะของเซิร์ฟเวอร์คือ 2048 บิต
ไม่สนับสนุนการเจรจาใหม่อย่างปลอดภัย
การบีบอัด: ไม่มี
การขยายตัว: ไม่มี
ไม่มีการเจรจา ALPN
ข้อมูลต้นไม่ได้ถูกส่ง
ตรวจสอบรหัสส่งคืน: 21 (ไม่สามารถตรวจสอบใบรับรองใบแรกได้)
---
---
ตั๋วเซสชันใหม่หลังงานจับมือมาถึงแล้ว:
เซสชัน SSL:
    โปรโตคอล : TLSv1.3
    รหัส : TLS_AES_256_GCM_SHA384
    รหัสเซสชัน: B157BD91FF0A458D6A546C26CB5665C95CD88B99CE6C66A5D98783642C39EFA4
    เซสชัน-ID-ctx:
    การเริ่มต้นใหม่ PSK: CB807FC16CE11EB47FE7BDDD99C71A5AAF1AE5CDC600A127230E914AFC4AE1018A34F72F44741D2440EB4917D5DDD0D7
    ตัวตน PSK: ไม่มี
    คำใบ้ประจำตัว PSK: ไม่มี
    ชื่อผู้ใช้ SRP: ไม่มี
    คำแนะนำอายุการใช้งานตั๋วเซสชัน TLS: 7200 (วินาที)
    ตั๋วเซสชั่น TLS:
    // ...0000 - 00e0


    เวลาเริ่มต้น: 1645286635
    หมดเวลา : 7200 (วินาที)
    ตรวจสอบรหัสส่งคืน: 21 (ไม่สามารถตรวจสอบใบรับรองใบแรกได้)
    ความลับหลักเพิ่มเติม: ไม่
    ข้อมูลต้นทางสูงสุด: 0
---
อ่าน R BLOCK
2ââ#08S01หมดเวลาอ่านแพ็กเก็ตการสื่อสารread:errno=0

ในการตรวจสอบว่าผู้ออกและหัวเรื่องของใบรับรองตั้งค่าถูกต้องหรือไม่ ฉันเรียกใช้:

openssl crl2pkcs7 -nocrl -certfile fullchain.pem | opensl pkcs7 -print_certs -ไม่มี

ทุกอย่างดูโอเคที่นี่:

เรื่อง=CN = maraxai.de
ผู้ออก = C = US, O = Let's Encrypt, CN = R3

subject=C = US, O = Let's Encrypt, CN = R3
ผู้ออก=C = US, O = Internet Security Research Group, CN = ISRG Root X1

หัวเรื่อง = C = สหรัฐอเมริกา, O = กลุ่มวิจัยความปลอดภัยทางอินเทอร์เน็ต, CN = ISRG Root X1
ผู้ออก = O = Digital Signature Trust Co., CN = DST Root CA X3

นอกจากนี้ สำหรับ privkey.pem ฉันเปลี่ยนรูปแบบคีย์เป็น PKCS#1 เพื่อรับส่วนหัวที่ถูกต้อง ----- เริ่มต้นรหัสส่วนตัว RSA ----- ด้วยคำสั่ง $openssl rsa -ใน privkey.pem -ออก privkey.pem.

ฉันไม่รู้ว่าจะตรวจสอบปัญหานี้เพิ่มเติมอย่างไร ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.

in flag
โดยทั่วไปใบรับรอง SSL และพอร์ต 443 ใช้กับ Apache ไม่ใช่ MySQL คุณได้กำหนดค่า MySQL ให้ฟังทั้ง 3306 และ 443 หรือไม่ เป้าหมายคือการให้เครื่องภายนอกเชื่อมต่อกับฐานข้อมูลนี้ผ่าน SSL แทนที่จะใช้วิธีที่ปลอดภัยทั่วไปเช่นอุโมงค์ SSH หรือไม่
ht flag
ใช่ ฉันต้องการการเชื่อมต่อภายนอก ฉันต้องการเรียกใช้แอปพลิเคชัน Nodejs บนโดเมนของฉัน ซึ่งเป็นแบบสอบถาม คำถามจะถูกเก็บไว้ใน MySQL เช่นเดียวกับคำตอบ เมื่อเสร็จสิ้น PDF จะถูกสร้างขึ้นซึ่งจะถูกส่งทางอีเมลไปยังผู้ใช้ เซิร์ฟเวอร์รับฟังพอร์ต 443 สำหรับ Apache และบนพอร์ต 3306 สำหรับ MySQL
ht flag
ฉันต้องแก้ไขตัวเอง: การเชื่อมต่อ mysql ภายนอกใช้งานได้ ฉันเข้าใจ: SSL: รหัสที่ใช้คือ TLS_AES_256_GCM_SHA384 การเชื่อมต่อ: maraxai.de ​​ผ่าน TCP/IP พอร์ต TCP: 3306

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา