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

เริ่มจากนโยบายการตั้งชื่อที่เซิร์ฟเวอร์ใช้

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

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

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

ตรวจสอบว่าอะไรคือสิ่งที่รับไคลเอนต์จริงๆ

ที่ผูกกับไฟล์ที่ตรงกัน client-config-dir ให้ตัวเลือกเฉพาะไคลเอนต์ โดยลำพังมันไม่ใช่กฎการรับ การรับตามชื่อต้องใช้ ccd-exclusive ซึ่งปฏิเสธไคลเอนต์ที่ไม่มีไฟล์ตรงกัน การเปิดใช้ในการติดตั้งที่ทำงานอยู่จะตัดการเชื่อมต่อของทุกคนที่ชื่อไม่มีไฟล์ ดังนั้นนับไฟล์ก่อนเปลี่ยนอะไร

grep -nE 'ccd-exclusive|client-config-dir|username-as-common-name' /etc/openvpn/server/server.conf
ls -1 /etc/openvpn/ccd/

จำนวนคือการตรวจสอบ เปรียบเทียบรายการไดเรกทอรีกับตัวตนที่คุณคาดว่าจะเชื่อมต่อ

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

ตรวจสอบ CRL ที่เกตเวย์โหลด

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

ยืนยันเส้นทางที่กำหนดไว้ วันที่ออก และฟิลด์การอัปเดตครั้งถัดไปก่อนจะเชื่อถือไฟล์นั้น

openssl crl -in /etc/openvpn/crl.pem -noout -lastupdate -nextupdate
openssl x509 -in office-laptop.crt -noout -serial -subject

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

เปลี่ยนก่อน แล้วพิสูจน์ผลลัพธ์ทั้งสอง

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

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

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

สิ่งที่การตรวจชื่อทำไม่ได้เลย

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

เมื่อจำเป็นต้องควบคุมระดับใบรับรอง ให้ใช้กลไกที่ระบุใบรับรอง ได้แก่ รายการใน CRL หรือฮุกตรวจสอบที่ตรวจลายนิ้วมือซึ่งผู้ดูแลรักษาไว้ ทั้งสองอย่างต้องบำรุงรักษา และทั้งสองอย่างซื่อสัตย์ต่อวัตถุที่ตรวจ คู่มือ OpenVPN 2.6 ระบุ crl-verify และการรับเฉพาะไคลเอนต์เป็นตัวเลือกแยกกัน ด้วยเหตุผลนั้น

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

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