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