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

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

เครื่องมือใบรับรองของคุณจะไม่เตือนคุณ เพราะความไม่ซ้ำภายใน X.509 และความไม่ซ้ำของชื่อนโยบาย OpenVPN เป็นข้อกำหนดที่ต่างกันซึ่งบังคับใช้โดยระบบที่ต่างกัน

เซิร์ฟเวอร์ค้นหาชื่อ ไม่ใช่ลายนิ้วมือ

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

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

ที่ซึ่งสองหน่วยงานมาบรรจบกันบนชื่อเดียวกัน

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

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

เอกสาร OpenSSL CA ครอบคลุมการตั้งค่า unique_subject ซึ่งควบคุมความเห็นของฐานข้อมูลของมันเอง และจุดเริ่มต้นที่ซื่อสัตย์คือการอ่านการกำหนดค่าการออกของคุณแทนที่จะถือว่าค่าเริ่มต้นของ EasyRSA หรือ OpenSSL บางอย่างมีผล

จองชื่อที่มีผลก่อนเซ็น

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

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

การต่ออายุใช้ชื่อซ้ำโดยเจตนา

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

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

ยืนยันการแมปด้วยเครื่องมือบนเครื่อง

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

openssl x509 -in device42.crt -noout -subject -nameopt sep_multiline
ls -l /etc/openvpn/ccd/device42
grep -n "duplicate-cn" /etc/openvpn/server.conf

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

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

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