สองตัวตนในการล็อกอิน IKEv2 ครั้งเดียว: เครื่องก่อน แล้วจึงผู้ใช้
รอบที่สองของ IKEv2 ต้องให้ทั้งสองฝ่ายตกลงด้วย อ่าน local และ remote จากปลายทางที่คุณอยู่ แล้วทดสอบการจับคู่ที่คุณไม่ได้ตั้งใจจะอนุญาต
ใบรับรองไคลเอนต์ผ่านการตรวจสอบ การแลกเปลี่ยนรอบแรกเสร็จสิ้น แล้วการเชื่อมต่อก็หยุดด้วยข้อผิดพลาดเกี่ยวกับรอบการพิสูจน์ตัวตนเพิ่มเติม ไม่มีอะไรผิดในห่วงโซ่ใบรับรอง และไม่มีอะไรในเครือข่ายเปลี่ยนไป เกตเวย์ถูกตั้งค่าให้เรียกร้องหลักฐานที่สองจากฝั่งที่เชื่อมต่อ และไคลเอนต์ไม่เคยส่งหลักฐานนั้น การตัดสินว่าใครพิสูจน์อะไร ในลำดับใด คือทั้งภารกิจ และเริ่มจากการอ่านนโยบายจากปลายทางที่คุณยืนอยู่ หลักฐานสองแบบที่ต่างชนิดกันในลำดับที่แน่นอนเป็นการตัดสินใจออกแบบ ไม่ใช่ช่องทำเครื่องหมาย
อาการ: ล้มเหลวหลังหลักฐานแรกสำเร็จ
การแลกเปลี่ยนรอบแรกเสร็จสิ้นและบันทึกดูปกติจนกว่าเกตเวย์จะขอตัวตนผู้ใช้ผ่าน 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 มาใช้เป็นทางลัด จับคู่โปรโตคอล บทบาท ลำดับ และพฤติกรรมจริงของไคลเอนต์ แทนการลบรอบที่จำเป็นจนกว่าการเชื่อมต่อจะสำเร็จ การลบรอบที่ล้มเหลวคือวิธีที่การออกแบบสองหลักฐานกลายเป็นการออกแบบหลักฐานเดียวอย่างเงียบ ๆ ที่ไม่มีใครตรวจสอบ เก็บการลบไว้ในบันทึกการเปลี่ยนแปลง