Score:0

WSL-Docker: curl: (60) ไม่สามารถรับใบรับรองผู้ออกในเครื่องได้

ธง cn

หลังจากการกำหนดค่าพีซีใหม่ ฉันไม่สามารถใช้ Docker ได้อย่างถูกต้อง เนื่องจากคำสั่ง curl บางคำสั่งถูกปฏิเสธเนื่องจากปัญหา SSL/TLS

ในตัวอย่างเดียว curl -vfsSL https://apt.releases.hashicorp.com/gpg ส่งคืนข้อผิดพลาดต่อไปนี้:

* ลอง 52.222.214.125:443...
* ตั้งค่า TCP_NODELAY
* เชื่อมต่อกับ apt.releases.hashicorp.com (52.222.214.125) พอร์ต 443 (#0)
* ALPN ให้บริการ h2
* ALPN ให้บริการ http/1.1
* ตั้งค่าตำแหน่งการตรวจสอบใบรับรองสำเร็จแล้ว:
* ไฟล์ CA: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (ออก), การจับมือ TLS, สวัสดีลูกค้า (1):
* TLSv1.3 (IN), การจับมือ TLS, สวัสดีเซิร์ฟเวอร์ (2):
* TLSv1.3 (ออก), TLS เปลี่ยนรหัส, เปลี่ยนข้อมูลจำเพาะของรหัส (1):
* TLSv1.3 (ออก), การจับมือ TLS, สวัสดีลูกค้า (1):
* TLSv1.3 (IN), การจับมือ TLS, สวัสดีเซิร์ฟเวอร์ (2):
* TLSv1.3 (IN), TLS handshake, ส่วนขยายที่เข้ารหัส (8):
* TLSv1.3 (IN), การจับมือ TLS, ใบรับรอง (11):
* TLSv1.3 (OUT), การแจ้งเตือน TLS, CA ที่ไม่รู้จัก (560):
* ปัญหาใบรับรอง SSL: ไม่สามารถรับใบรับรองจากผู้ออกในท้องถิ่น
* ปิดการเชื่อมต่อ 0
curl: (60) ปัญหาใบรับรอง SSL: ไม่สามารถรับใบรับรองผู้ออกในเครื่องได้
รายละเอียดเพิ่มเติมที่นี่: https://curl.haxx.se/docs/sslcerts.html

curl ไม่สามารถตรวจสอบความถูกต้องของเซิร์ฟเวอร์ได้ ดังนั้นจึงไม่สามารถทำได้
สร้างการเชื่อมต่อที่ปลอดภัยกับมัน หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับสถานการณ์นี้และ
วิธีแก้ไขโปรดไปที่หน้าเว็บที่กล่าวถึงข้างต้น

หลังจากขุดค้นมาสักพัก ตอนนี้ฉันรู้แล้วว่าสิ่งนี้ ปัญหายังเกิดขึ้นภายในอิมเมจ WSL ของฉันด้วย แต่ไม่ใช่ในโฮสต์ Windows OS. ดังนั้น ฉันเชื่อว่านี่จะต้องเป็นปัญหาที่มาจากการตั้งค่า WSL ของฉัน และไม่ได้เกิดจาก Docker เอง (?)

มีคำถามที่เกี่ยวข้องกับ serverfault/stackoverflow อยู่สองสามข้อ แต่ไม่พบวิธีแก้ไขที่ใช้กับกรณีนี้:

FWIW ฉันทำงานในองค์กรโดยใช้ระบบปฏิบัติการที่ออกโดย ITแน่นอนว่านั่นอาจเป็นสาเหตุของข้อผิดพลาด แต่พวกเขาไม่สามารถช่วยฉันแก้ปัญหานี้ได้ อย่างไรก็ตามพีซีของเพื่อนร่วมงานเครื่องหนึ่งทำงานได้อย่างไร้ที่ติ

ความคิดใด ๆ ?


การตั้งค่าพีซี:

  • วินโดวส์ 10 เอ็นเตอร์ไพรส์
    • รุ่น: 21H1
    • รุ่นระบบปฏิบัติการ: 19043.1645
    • Windows Feature Experience Pack: 120.2212.4170.0
  • WSL 2 พร้อม Ubuntu-20.04
  • Docker Desktop 4.7.1 (77678) พร้อมเอ็นจิ้นที่ใช้ WSL 2

อัพเดท 1

ตามที่ @Martin แนะนำ ฉันลองดาวน์โหลดแล้ว https://www.amazontrust.com/repository/AmazonRootCA1.pem, ใส่มันเข้าไปข้างใน /tmp ใน WSL Ubuntu และรันคำสั่งใหม่ ขด --cacert /tmp/AmazonRootCA1.pem -vfsSL https://apt.releases.hashicorp.com/gpg ไม่มีประโยชน์:

ขด --cacert /tmp/AmazonRootCA1.pem -vfsSL https://apt.releases.hashicorp.com/gpg
* ลอง 52.222.214.72:443...
* ตั้งค่า TCP_NODELAY
* เชื่อมต่อกับ apt.releases.hashicorp.com (52.222.214.72) พอร์ต 443 (#0)
* ALPN ให้บริการ h2
* ALPN ให้บริการ http/1.1
* ตั้งค่าตำแหน่งการตรวจสอบใบรับรองสำเร็จแล้ว:
* ไฟล์ CA: /tmp/AmazonRootCA1.pem
  CApath: /etc/ssl/certs
* TLSv1.3 (ออก), การจับมือ TLS, สวัสดีลูกค้า (1):
* TLSv1.3 (IN), การจับมือ TLS, สวัสดีเซิร์ฟเวอร์ (2):
* TLSv1.3 (ออก), TLS เปลี่ยนรหัส, เปลี่ยนข้อมูลจำเพาะของรหัส (1):
* TLSv1.3 (ออก), การจับมือ TLS, สวัสดีลูกค้า (1):
* TLSv1.3 (IN), การจับมือ TLS, สวัสดีเซิร์ฟเวอร์ (2):
* TLSv1.3 (IN), TLS handshake, ส่วนขยายที่เข้ารหัส (8):
* TLSv1.3 (IN), การจับมือ TLS, ใบรับรอง (11):
* TLSv1.3 (OUT), การแจ้งเตือน TLS, CA ที่ไม่รู้จัก (560):
* ปัญหาใบรับรอง SSL: ไม่สามารถรับใบรับรองจากผู้ออกในท้องถิ่น
* ปิดการเชื่อมต่อ 0
curl: (60) ปัญหาใบรับรอง SSL: ไม่สามารถรับใบรับรองผู้ออกในเครื่องได้
รายละเอียดเพิ่มเติมที่นี่: https://curl.haxx.se/docs/sslcerts.html

curl ไม่สามารถตรวจสอบความถูกต้องของเซิร์ฟเวอร์ได้ ดังนั้นจึงไม่สามารถทำได้
สร้างการเชื่อมต่อที่ปลอดภัยกับมัน หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับสถานการณ์นี้และ
วิธีแก้ไขโปรดไปที่หน้าเว็บที่กล่าวถึงข้างต้น
Martin avatar
kz flag
นี่น่าจะเป็นปัญหากับไฟล์ root-ca ในเครื่องของคุณ... ทุกระบบปฏิบัติการต้องมีรายการของ root CA ที่ระบบปฏิบัติการของคุณเชื่อถือ หรือในกรณีของคุณ ระบบย่อยนักเทียบท่า ถ้ารูท CA ของรีโมตโฮสต์ไม่ได้อยู่ในรายการ CA ที่เชื่อถือได้ในเครื่องของคุณ การเชื่อมต่อจะถูกปฏิเสธ มีไฟล์ ```/etc/ssl/certs/ca-certificates.crt``` อยู่หรือไม่
casparjespersen avatar
cn flag
ใช่แล้ว. มีใบรับรองมากมายปรากฏขึ้น
Martin avatar
kz flag
ดาวน์โหลด ```https://www.amazontrust.com/repository/AmazonRootCA1.pem``` วางไว้ข้างใน ```/tmp``` และรันคำสั่งใหม่ดังนี้: ```curl --cacert / tmp/AmazonRootCA1.pem -vfsSL https://apt.releases.hashicorp.com/gpg``` - หากสำเร็จ แสดงว่าชุดใบรับรอง ca ของคุณไม่มี amazon root ca !
casparjespersen avatar
cn flag
@Martin ฉันเพิ่งลอง แต่น่าเสียดายที่สิ่งนี้ไม่สามารถแก้ไขปัญหาได้ ฉันได้อัปเดตคำถามเดิมของฉันด้วยรายละเอียดเอาต์พุตอย่างละเอียดจากการรันซ้ำ
cn flag
ต่อ crl ได้ไหมครับ
casparjespersen avatar
cn flag
@GregAskew ฉันเป็นมือใหม่ในพื้นที่นี้ ฉันต้องการตัวชี้ที่ตรงกว่านี้เล็กน้อย :) เชื่อมต่อกับ crl .. นั่นคืออะไร ฉันจะทดสอบได้อย่างไร
cn flag
จุดสิ้นสุดต้องสามารถตรวจสอบใบรับรองได้ การตรวจสอบหนึ่งรายการกำลังเชื่อมต่อกับรายการเพิกถอนใบรับรอง crl บน tcp/80
casparjespersen avatar
cn flag
ขออภัย นั่นไม่ได้ช่วยฉันในการตรวจสอบว่าเป็นไปได้หรือไม่ คุณสามารถให้ลิงค์ไปยังคำแนะนำได้หรือไม่?
Martin avatar
kz flag
GregAskew อ้างถึงลิงก์ที่เขียนโดยตรงภายในใบรับรอง (เปิดลิงก์ในเบราว์เซอร์แล้วคลิก "ดูใบรับรอง") ฉันคิดว่ามันคือลิงก์นี้ ```http://crl.sca1b.amazontrust.com/sca1b-1.crl``` - ลองเข้าถึงลิงก์นี้ จากในภาชนะ...
casparjespersen avatar
cn flag
ตกลง. เมื่อดูที่ระบบปฏิบัติการ Windows ของฉัน ฉันเห็นใบรับรอง CRL Endpoint เป็น http://gateway.zscaler.net/zscaler-zscrl--4.crl -- และฉันสามารถดึงข้อมูลนี้โดยใช้ CURL ภายใน WSL
Martin avatar
kz flag
เป็นไปได้หรือไม่ที่คุณมีเกตเวย์/ไฟร์วอลล์ระหว่างคอนเทนเนอร์นักเทียบท่ากับอินเทอร์เน็ตที่สกัดกั้นการเชื่อมต่อ SSL CRL ที่คุณโพสต์นี้ดูไม่เหมือนใบรับรองต้นฉบับ...
casparjespersen avatar
cn flag
เป็นไปได้อย่างแน่นอน แผนกไอทีของเราควบคุมสิ่งนี้จากระยะไกล
Martin avatar
kz flag
โปรดดำเนินการต่อไปนี้และระบุ trust chain ในคำตอบของคุณ โปรด: ```echo "" | openssl s_client -เชื่อมต่อ apt.releases.hashicorp.com:443 -ชื่อเซิร์ฟเวอร์ apt.releases.hashicorp.com:443 | opensl x509 -text -noout```
casparjespersen avatar
cn flag
ให้เรา [ดำเนินการสนทนาต่อในการแชท](https://chat.stackexchange.com/rooms/136157/discussion-between-casparjespersen-and-martin)
Score:2
ธง kz

ในที่สุดเราก็คิดออก ปัญหาคือฝ่ายไอทีติดตั้งไฟร์วอลล์ที่สกัดกั้นการเชื่อมต่อ SSL (ไฟร์วอลล์จำนวนมากทำเช่นนี้เพื่อให้สามารถบล็อกทราฟฟิกที่ "ไม่ดี" ซึ่งจะตรวจไม่พบเนื่องจากการเข้ารหัส)

เพื่อให้สามารถสกัดกั้นการเชื่อมต่อ SSL ได้ ไฟร์วอลล์จะใส่ใบรับรองของตัวเองไว้ที่ลิงก์ และทำหน้าที่เป็นพร็อกซี นั่นคือที่มาของปัญหา: คอนเทนเนอร์นักเทียบท่าไม่เชื่อถือ CA ที่ใช้โดยไฟร์วอลล์ของคุณ ดังนั้นจึงปฏิเสธการสร้างการเชื่อมต่อเห็นได้ชัดว่าสำหรับเครื่อง windows ของคุณ CA ได้ถูกเพิ่มไปยัง trust store แล้ว - สิ่งนี้จำเป็นต้องทำสำหรับคอนเทนเนอร์นักเทียบท่าของคุณด้วย - หรือคุณต้องเพิ่ม --ไม่ปลอดภัย เปลี่ยนไปใช้คำสั่ง curl ของคุณเพื่อละเว้นข้อผิดพลาดของใบรับรองเหล่านั้น

โปรดทราบว่า curl แสดงข้อผิดพลาดอย่างถูกต้องเนื่องจาก https - กลไกใบรับรองถูกประดิษฐ์ขึ้นเพื่อให้สามารถตรวจจับการโจมตี "Man in the Middle" - และนี่คือสิ่งที่เกิดขึ้นที่นี่ (ฉันจะข้ามความคิดเห็นของฉันที่นี่เกี่ยวกับไฟร์วอลล์ที่ทำลายความปลอดภัย SSL เพื่อให้สามารถตรวจสอบเนื้อหาแพ็กเก็ตได้...)

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

เพื่อความสมบูรณ์ นี่คือใบรับรองที่คุณเห็น:

ใบรับรอง:
    ข้อมูล:
        รุ่น: 3 (0x2)
        หมายเลขซีเรียล:
            6a:7b:6c:fd:70:b2:68:1a:56:e3:11:3c:43:ed:ae:29
        อัลกอริทึมลายเซ็น: sha1WithRSAEncryption
        ผู้ออก: C = US, ST = California, L = Sunnyvale, O = Bad Server Certificate [ใบรับรองเซิร์ฟเวอร์ไม่ถูกต้อง], CN = Bad Server Certificate
        ความถูกต้อง
            ไม่ใช่ก่อน: 26 มกราคม 07:08:23 น. 2554 GMT
            ไม่หลังจาก : 11 พ.ย. 07:08:23 2284 GMT
        เรื่อง: CN = apt.releases.hashicorp.com
[ตัด]

นี่คือต้นฉบับ:

ใบรับรอง:
    ข้อมูล:
        รุ่น: 3 (0x2)
        หมายเลขซีเรียล:
            03:57:ef:0e:70:b2:68:1a:56:e3:11:3c:43:ed:ae:29
        อัลกอริทึมลายเซ็น: sha256WithRSAEncryption
        ผู้ออก: C = US, O = Amazon, OU = เซิร์ฟเวอร์ CA 1B, CN = Amazon
        ความถูกต้อง
            ไม่ก่อน: 27 เมษายน 00:00:00 น. 2022 GMT
            ไม่ทัน : 26 พฤษภาคม 23:59:59 น. 2023 GMT
        เรื่อง: CN = apt.releases.hashicorp.com
casparjespersen avatar
cn flag
ขอขอบคุณ. เป็นไปไม่ได้ / เป็นไปได้สำหรับฉันที่จะเพิ่มแฟล็ก --insecure ให้กับคำสั่ง curl ดังนั้นฉันจึงสนใจในการแก้ไขที่เหมาะสม ฉันไปที่ที่เก็บใบรับรองบน ​​Windows และส่งออกไฟล์ CER จากใบรับรอง Zscaler Root CA และตอนนี้ใช้งานได้เมื่อทำ `curl --cacert ca.cer -fsSL https://apt.releases.hashicorp.com/gpg` ไชโย! สุดท้าย วิธีที่เหมาะสมในการเพิ่มใบรับรองนี้ "ทั่วโลก" คืออะไร ดังนั้นฉันจึงไม่ต้องระบุทุกครั้ง
casparjespersen avatar
cn flag
ไม่เป็นไร - พบได้ที่: https://ubuntu.com/server/docs/security-trust-store ขอบคุณมาก!
Martin avatar
kz flag
ดีใจที่ฉันสามารถช่วยได้!

โพสต์คำตอบ

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