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

อาการ: ล้มเหลวหลังหลักฐานแรกสำเร็จ

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

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

ส่วนขยายเพิ่มอะไร และไม่เพิ่มอะไร

IKEv2 มีส่วนขยายสำหรับการแลกเปลี่ยนการพิสูจน์ตัวตนมากกว่าหนึ่งครั้งภายในเซสชันเดียว RFC 4739 ร่างลำดับต่าง ๆ รวมถึงไคลเอนต์ที่พิสูจน์ตัวตนด้วยใบรับรองแล้วจึงพิสูจน์ตัวตนบุคคลผ่าน EAP เอกสารนี้อยู่ในสถานะทดลอง ซึ่งหมายความว่าไม่มีการใช้งานใดที่ติดค้างคุณสมบัตินี้ไว้กับคุณ อย่าสมมติสิ่งใดเกี่ยวกับการสนับสนุนจนกว่าอีกฝ่ายจะเจรจาเรื่องนี้

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

หลักฐานหนึ่งรายการต่อปลายทางเป็นรูปแบบปกติ และไม่ใช่การออกแบบนี้ เกตเวย์แสดงใบรับรองของตน ผู้ใช้ตอบ EAP และแต่ละฝ่ายพิสูจน์ตัวตนอีกฝ่ายเพียงครั้งเดียว หลักฐานทั้งสองมาจากปลายทางตรงข้ามกัน ดังนั้นไม่มีอันใดกล่าวแยกเกี่ยวกับเครื่องและบุคคลที่ใช้เครื่องนั้น

EAP-TLS เป็นรูปแบบที่สาม และก็ไม่ใช่รูปแบบนี้เช่นกัน ที่นั่นใบรับรองไคลเอนต์ถูกแสดงภายในวิธีการ EAP ดังนั้นไคลเอนต์ยังคงทำการพิสูจน์ตัวตน IKE เพียงครั้งเดียว ข้อมูลรับรองอาจดูเหมือนกรณีหลายรอบในขณะที่โปรโตคอลมีเพียงรอบเดียวไม่ใช่สองรอบ นั่นคือเหตุผลที่การออกแบบที่คัดลอกจากระบบ EAP-TLS ล้มเหลวตรงจุดที่คาดว่าหลักฐานที่สองจะมา

ไฟล์เดียวกันอ่านต่างกันบนเกตเวย์

ไฟล์ swanctl เดียวกันอ่านต่างกันขึ้นอยู่กับว่าทำงานที่ไหน และนั่นคือส่วนที่ทำให้คนสับสน บนแล็ปท็อปเกตเวย์คืออีกฝ่าย และบนเกตเวย์แล็ปท็อปคืออีกฝ่าย ดังนั้นเขียนฝั่ง local ว่าใครคือฉัน และฝั่ง remote ว่าฉันจะยอมรับใคร บล็อก local อธิบายว่าปลายทางนี้พิสูจน์ตัวตนของตัวเองอย่างไร และบล็อก remote ระบุสิ่งที่ต้องการจากอีกปลายทาง การคัดลอกบล็อกระหว่างสองไฟล์กลับความหมายโดยไม่เปลี่ยนแม้แต่ตัวอักษรเดียว การเทียบสองไฟล์แทบไม่บอกอะไรเลย เพราะคำเดียวกันมีความหมายตรงข้ามในแต่ละไฟล์

ตำแหน่งของส่วนกำหนดลำดับของมัน เว้นแต่หมายเลขรอบจะเขียนทับ ส่วน local หรือ remote เพิ่มเติมจึงอธิบายรอบเพิ่มเติมไม่ใช่ทางเลือก และหมายเลขรอบที่ระบุชัดเจนในเอกสารอ้างอิง swanctl.conf มีอยู่เพื่อทำให้ลำดับนั้นเป็นความตั้งใจ หากไม่มี การย้ายบล็อกจะเปลี่ยนพฤติกรรม นั่นก็เป็นเหตุผลที่การตั้งค่าสองชุดที่ดูเท่ากันบนกระดาษอาจทำงานในลำดับตรงข้ามกัน

กฎลำดับนั้นสร้างโหมดความล้มเหลวที่ควรจดจำ บล็อก remote ที่สองไม่ใช่ตัวเลือกที่ยอมรับได้อีกตัว แต่เป็นการเรียกข้อที่สอง ซึ่งเป็นเหตุผลที่นโยบายที่อ่านเหมือนอย่างใดอย่างหนึ่งกลับทำงานแบบและจากนั้น นโยบายของเกตเวย์อาจยอมรับใบรับรองของเครื่องที่ลงทะเบียนแล้วและจากนั้นเรียกร้องการแลกเปลี่ยน EAP ของผู้ใช้คนนั้นตามลำดับนั้น

แยกแยะรอบออกจากปัจจัยอิสระ

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

ใบรับรองเครื่องพิสูจน์การครอบครองกุญแจที่ได้รับการยอมรับ และไม่มีอะไรมากกว่านั้น มันไม่ใช่การรับรองฮาร์ดแวร์และไม่ใช่รายงานสุขภาพอุปกรณ์ ดังนั้นนโยบายที่ต้องการข้อมูลสภาวะจึงต้องใช้กลไกอื่น ฟิลด์ subject ก็ไม่ใช่ป้ายสินค้าคงคลังที่คุณไว้วางใจได้ เพราะ subject ถูกเลือกโดยผู้ที่ออกหรือลงทะเบียนใบรับรอง หากการออกแบบต้องการหลักฐานว่าเครื่องมีสุขภาพดี หลักฐานนั้นต้องมาจากองค์ประกอบที่วัดเครื่อง

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

เขียนกฎการจับคู่และทดสอบการปฏิเสธ

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

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

swanctl --list-conns
swanctl --list-sas

ตรวจสอบรอบที่เจรจาและการอนุญาตที่ได้ ไม่ใช่แค่การล็อกอินที่สำเร็จ และอย่าเอาการตั้งค่า XAuth แบบเดิมของ IKEv1 มาใช้เป็นทางลัด จับคู่โปรโตคอล บทบาท ลำดับ และพฤติกรรมจริงของไคลเอนต์ แทนการลบรอบที่จำเป็นจนกว่าการเชื่อมต่อจะสำเร็จ การลบรอบที่ล้มเหลวคือวิธีที่การออกแบบสองหลักฐานกลายเป็นการออกแบบหลักฐานเดียวอย่างเงียบ ๆ ที่ไม่มีใครตรวจสอบ เก็บการลบไว้ในบันทึกการเปลี่ยนแปลง

บทความที่เกี่ยวข้อง