ทำไม OpenConnect จึงปฏิเสธเกตเวย์หลังเปลี่ยนใบรับรอง?
ความล้มเหลวในการตรวจสอบหลังเปลี่ยนใบรับรองของเกตเวย์เป็นการตัดสินใจเรื่องความไว้วางใจ ไม่ใช่ทันเนลที่พัง เลือกระหว่าง CA ผู้ออกใบรับรองกับการปักหมุดคีย์เดียว
เกตเวย์เปลี่ยนใบรับรอง และไคลเอนต์ที่ยังเชื่อมต่อได้เมื่อวานก็เริ่มหยุดที่การแลกเปลี่ยน TLS ครั้งแรก ข้อความระบุสาเหตุการตรวจสอบไม่ใช่ความผิดพลาดของเครือข่าย และตัวเครื่องเองไม่ได้เปลี่ยน นั่นคือเบาะแสที่มีประโยชน์ สิ่งที่พังคือความสัมพันธ์ระหว่างใบรับรองที่นำเสนออยู่กับรากที่ไคลเอนต์ยอมรับพิจารณา การซ่อมจึงเป็นการตัดสินใจเรื่องความไว้วางใจ ดังนั้นจงตัดสินใจก่อนพิมพ์ตัวเลือกใด ๆ
อ่านความล้มเหลวก่อนเปลี่ยนการตั้งค่าความไว้วางใจใด ๆ
ข้อผิดพลาดแบบไม่พบผู้ลงนามหมายความว่าสายโซ่ไปสิ้นสุดที่บางสิ่งซึ่งไคลเอนต์ไม่ยอมรับ อาจเป็นใบรับรองที่ต่ออายุจากหน่วยงานภายใน การแทนที่จากหน่วยงานสาธารณะ หรืออุปกรณ์ตรงกลางที่นำเสนอใบรับรองของตัวเอง ถ้อยคำเพียงอย่างเดียวแยกกรณีเหล่านั้นไม่ได้ดังนั้นจงดูผู้ออกใบรับรองก่อนตัดสินใจ
รันการเชื่อมต่อหนึ่งครั้งในเบื้องหน้าและปล่อยให้ล้มเหลว เพราะผลลัพธ์แบบโต้ตอบมีชื่อเซิร์ฟเวอร์ สายโซ่ผู้ออกใบรับรอง และลายนิ้วมือที่ไคลเอนต์คำนวณไว้ เปรียบเทียบผู้ออกใบรับรองนั้นกับหน่วยงานที่องค์กรของคุณดำเนินการจริง หากลายนิ้วมือเปลี่ยนแต่ผู้ออกไม่เปลี่ยน ให้ถือว่าน่าสงสัยจนกว่าการต่ออายุจะได้รับการยืนยันผ่านช่องทางที่คุณไว้วางใจอยู่แล้ว การเดาในจุดนี้คือทางที่คนหนึ่งจะลงเอยด้วยการปักหมุดคีย์ของผู้ดักฟัง
บันทึกเวอร์ชันไคลเอนต์ไว้ในบันทึกเดียวกัน ความล้มเหลวจำนวนมากที่ดูเหมือนปัญหาความไว้วางใจมาจากไคลเอนต์รุ่นเก่าที่พบการแลกเปลี่ยนเกตเวย์รุ่นใหม่กว่า
เลือกระหว่างการไว้วางใจผู้ออกใบรับรองกับการปักหมุดคีย์เดียว
ทั้งสองทางทำให้การเชื่อมต่อสำเร็จ แต่จะพังในทางตรงข้ามในภายหลัง ทางเลือกจึงขึ้นกับความล้มเหลวที่คุณทนได้
| Approach | Good fit | What breaks it |
|---|---|---|
Trust the issuing CA with --cafile | Internal PKI you can obtain over an already trusted channel | CA rotation, or a client that still falls back to public roots |
Pin one key with --servercert | No CA relationship, or exactly one key should ever be accepted | Any reissue that generates a new key pair |
ใช้ไฟล์ CA เมื่อใบรับรองมาจากหน่วยงานที่คุณตรวจสอบได้อย่างอิสระ เพราะการต่ออายุจะยังทำงานโดยไม่ต้องแตะอาร์กิวเมนต์ของไคลเอนต์ จับคู่กับสวิตช์ที่ปิดรากของระบบ มิฉะนั้นหน่วยงานสาธารณะอาจทำให้การตรวจสอบผ่านแทนคุณได้ ให้ปักหมุดแทนเมื่อเกตเวย์ไม่มี CA ที่คุณหาได้ หรือเมื่อเป้าหมายคือข้อยกเว้นที่แคบที่สุดเท่าที่เป็นไปได้ ไม่มีเส้นทางใดปลอดภัยกว่าในเชิงนามธรรม ทั้งสองอย่าง CA ขยายได้ข้ามการต่ออายุ ส่วนการปักหมุดตรวจทานได้ง่ายกว่า
ไม่ว่าคุณจะเลือกทางใด ค่าที่ไว้วางใจต้องมาผ่านช่องทางที่ไว้วางใจก่อนการเปลี่ยนแปลงจะเกิดขึ้น ผู้ดูแลระบบ เซสชันคอนโซลบนเกตเวย์ หรือสำเนาที่ถ่ายไว้ก่อนหน้า ล้วนเข้าเกณฑ์ทั้งสิ้น การคัดลอกลายนิ้วมือที่พรอมป์แสดงให้เห็นนั้นสะดวก และเป็นสิ่งที่ผู้ดักฟังหวังไว้พอดี
ใส่ค่าลงในคำสั่งที่คุณเรียกใช้จริง
การปักหมุดเดินทางในตัวเลือกใบรับรองเซิร์ฟเวอร์ และคำนำหน้าตัดสินการเข้ารหัส ได้แก่ สรุปคีย์สาธารณะฐานสิบหกภายใต้ sha1 หรือ sha256 และการปักหมุดคีย์ base64 ภายใต้ pin-sha256 การให้ค่านี้ยังปิดความไว้วางใจของระบบสำหรับการรันนั้น คีย์ที่ปักหมุดจึงกลายเป็นการตัดสินใจทั้งหมด
sudo openconnect --protocol=gp vpn.example.com --user alice \
--servercert pin-sha256:AbCdEf... # single key pin
sudo openconnect vpn.example.com --cafile /etc/ssl/internal-ca.pem --no-system-trust
ไคลเอนต์จับคู่สรุปที่ถูกตัดทอน โดยยอมรับเพียงสี่อักขระหลังคำนำหน้า ซึ่งเป็นกับดักไม่ใช่ความสะดวก ค่าที่ทำให้สั้นลงผ่านได้ในเครื่องและยังไม่ระบุเกตเวย์ที่คุณตั้งใจ คัดลอกสตริงเต็มที่ไคลเอนต์พิมพ์ในการลองครั้งแรกแทนการพิมพ์ซ้ำจากข้อความ จากนั้นย้ายตัวเลือกที่เสร็จแล้วไปไว้ในสคริปต์ห่อ ไฟล์ยูนิต หรือโปรไฟล์ที่เริ่มการเชื่อมต่อ เพื่อให้การตัดสินใจเรื่องความไว้วางใจตรวจทานได้และการแก้ไขภายหลังเป็นโดยเจตนา
ตัวเรียกใช้บนเดสก์ท็อปและปลั๊กอิน NetworkManager เก็บสำเนาอาร์กิวเมนต์การเชื่อมต่อของตนเอง สคริปต์ที่แก้ไขบนดิสก์ไม่ถึงโปรไฟล์ที่นำเข้าภายหลัง ดังนั้นค่าที่เก็บไว้ยังคงชนะ
จัดการการเปลี่ยนโดยไม่ล็อกตัวเองออก
ตัวเลือกนี้ให้ได้มากกว่าหนึ่งครั้ง การเปลี่ยนแปลงที่วางแผนไว้จึงยอมรับคีย์ขาออกและขาเข้าได้พร้อมกัน เพิ่มการปักหมุดใหม่ก่อนที่เกตเวย์จะสลับ เก็บทั้งสองรายการไว้ขณะเซสชันย้าย และตัดรายการที่ปลดระวางออกเมื่อคีย์เก่าหมดไป หน้าต่างนั้นต้องมีเจ้าของ เพราะการปักหมุดคู่ที่ลืมไว้ทำให้คีย์ยังถูกไว้วางใจโดยไม่มีใครเฝ้าดู การสร้างใหม่ที่ผลิตคู่คีย์ใหม่จะทำลายการปักหมุดล้วน และการกู้คืนคือขั้นตอนเดียวกันในทิศตรงข้าม
เขียนวันที่เปลี่ยนแปลงข้างการปักหมุด การปักหมุดที่ไม่มีวันที่ตรวจทานคือความล้มเหลวในอนาคตที่พกข้อความผิดพลาดที่สับสน
ตัดเวอร์ชันไคลเอนต์ออกก่อนแก้ไขความไว้วางใจ
ไคลเอนต์ที่ล้าสมัยอาจล้มเหลวขณะแยกวิเคราะห์คำตอบการยืนยันตัวตนที่เกตเวย์เปลี่ยนไปแล้ว และข้อความบนพื้นผิวยังพูดถึงการเชื่อมต่อไม่ใช่ตัวแยกวิเคราะห์ เปรียบเทียบเวอร์ชันที่ติดตั้งกับสิ่งที่เกตเวย์บันทึกไว้ และทดสอบแพ็กเกจปัจจุบันในโปรไฟล์ใช้ครั้งเดียวก่อนเปลี่ยนการตั้งค่าความไว้วางใจใด ๆ
openconnect --version
หลังการซ่อม ให้ตรวจสอบสองอย่างไม่ใช่อย่างเดียว คือพอร์ทัลโหลดผ่านทันเนล และที่อยู่ภายในธรรมดาตอบสนอง การจับมือที่เสร็จสมบูรณ์พิสูจน์เพียงว่าการตัดสินใจเรื่องความไว้วางใจได้รับการยอมรับ