ชื่อไฟล์ ca.crt เดียวกัน แต่ใบรับรองต่างกัน: ควรเทียบอะไร
สองโปรไฟล์อาจมี ca.crt ที่เนื้อหาต่างกัน เก็บลายนิ้วมือของสิ่งที่โปรเซสโหลด แล้วตรวจว่ามันคือสมอความเชื่อถือที่คุณตั้งใจหรือไม่
ทั้งสองโปรไฟล์มีไฟล์ชื่อ ca.crt อุโมงค์หนึ่งขึ้นมาได้และอีกอันล้มเหลวด้วยข้อผิดพลาดห่วงโซ่ การเปิดไฟล์ทั้งสองวางข้างกันแทบไม่เคยตัดสินเรื่องนี้ได้ และการปิดการตรวจสอบกลับตัดสินไปในทางที่ผิด คำถามที่ข้อผิดพลาดถามจริง ๆ นั้นแคบกว่า: โปรเซสแต่ละตัวโหลดใบรับรองใดเป็นสมอความเชื่อถือของตน และทั้งสองเป็นวัตถุเดียวกันหรือไม่ ตอบคำถามนี้ก่อนแล้วการวินิจฉัยที่เหลือจะมีทิศทาง ชื่อไฟล์เป็นเพียงฉลากบรรจุภัณฑ์ และพาธที่เขียนในโปรไฟล์ก็ไม่ได้เป็นทางการเช่นกัน ทุกอย่างจึงขึ้นอยู่กับสิ่งที่โปรเซสอ่านจริง ๆ
หาใบรับรองที่ไคลเอนต์โหลดจริง ๆ
OpenVPN ยอมรับผู้ออกใบรับรองในสองรูปแบบ และรูปแบบเป็นตัวกำหนดว่าไบต์ใดสำคัญ โปรไฟล์สามารถชี้ไปยังไฟล์ภายนอกด้วย ca หรือฝังใบรับรองไว้ในบล็อก <ca> ภายในโปรไฟล์เอง เมื่อมีทั้งสองอย่าง บล็อกที่ฝังไว้จะชนะและไฟล์ข้างโปรไฟล์จะไม่ถูกเปิดเลย
อ่านโปรไฟล์ที่ล้มเหลวและค้นหาว่ามันใช้รูปแบบใดก่อนจะเทียบอะไรก็ตาม สำเนาที่ดึงมาจากไดเรกทอรีข้างเคียง หรือจากแพ็กเกจที่โปรไฟล์อีกอันมาจาก ไม่ได้บอกอะไรคุณเกี่ยวกับสิ่งที่โปรเซสนี้เชื่อถือ เช่นเดียวกันกับพาธในการตั้งค่า: มันถูกแก้ความสัมพันธ์กับตำแหน่งที่ไคลเอนต์เริ่มทำงาน ซึ่งไม่ใช่ไดเรกทอรีที่คุณกำลังดูอยู่เสมอไป อ่านโปรไฟล์ ไม่ใช่โฟลเดอร์
ใบรับรองถูกระบุด้วยเนื้อหา: กุญแจสาธารณะ ชื่อเรื่องและผู้ออก ช่วงเวลาที่ใช้ได้ และลายเซ็นเหนือทั้งหมดนั้น ไฟล์สองไฟล์ที่มีไบต์เหมือนกันคือใบรับรองเดียวกันไม่ว่าจะชื่ออะไร และไฟล์สองไฟล์ที่ชื่อเดียวกันอาจเป็นผู้ออกที่ไม่เกี่ยวข้องกัน ชื่อเป็นฉลากบรรจุภัณฑ์ ไม่ใช่ตัวตน
เก็บลายนิ้วมือของทั้งสองสำเนาด้วย openssl
ลายนิ้วมือคือแฮชเหนือการเข้ารหัส DER ของใบรับรอง ซึ่งเป็นรูปแบบที่ลายเซ็นครอบคลุม ดังนั้นการขึ้นบรรทัดใหม่และข้อความหัวเรื่องจึงส่งผลต่อมันไม่ได้ คำนวณสำหรับแต่ละไฟล์แล้วคุณจะได้สตริงฐานสิบหกสองชุดคั่นด้วยเครื่องหมายทวิภาค ซึ่งจะตรงกันหรือไม่ก็ได้ ไม่ต้องอ่านสิ่งอื่นในใบรับรองเพื่อตอบคำถามการเปรียบเทียบ
openssl x509 -in /etc/openvpn/office/ca.crt -noout -fingerprint -sha256
openssl x509 -in ~/profiles/lab-ca.pem -noout -fingerprint -sha256
การชี้ openssl ไปที่โปรไฟล์เองนั้นน่าลอง แต่ มันอ่านบล็อกใบรับรองแรกที่ปรากฏในไฟล์ และโปรไฟล์มักมี <cert> ก่อน <ca> แยกบล็อกผู้ออกใบรับรองออกมา แล้วเก็บลายนิ้วมือของไฟล์ที่แยกออกมา เพราะนั่นคือสำเนาที่ไคลเอนต์จะใช้จริง
sed -n '/^<ca>$/,/^<\/ca>$/p' office.ovpn | sed '1d;$d' > /tmp/office-ca.pem
openssl x509 -in /tmp/office-ca.pem -noout -fingerprint -sha256
ลายนิ้วมือเหมือนกันหมายความว่าวัสดุความเชื่อถือเดียวกันและข้อผิดพลาดห่วงโซ่มีสาเหตุอื่น ซึ่งเป็นการสอบสวนคนละเรื่อง ลายนิ้วมือต่างกันหมายความว่าใบรับรองต่างกัน และส่วนถัดไปเริ่มตรงนั้น
อ่านความไม่ตรงกันก่อนสันนิษฐานว่าเป็นการโจมตี
ลายนิ้วมือต่างกันหมายความว่าใบรับรองต่างกันเท่านั้น การออกใหม่ การหมุนเวียน ผู้ออกที่เปลี่ยนชื่อ หรือชุดที่ล้าสมัยล้วนสร้างไฟล์ต่างกันโดยมีประวัติที่ชอบธรรมทั้งหมด ใบใดเป็นของการติดตั้งเป็นคำถามสำหรับผู้ดูแลหรือบันทึกการติดตั้ง ไม่ใช่เวลาที่ไฟล์ถูกแก้ไข คลังเก็บสำเนาประทับเวลา ดังนั้นไฟล์ที่ใหม่กว่าไม่ได้เป็นสมอที่ถูกต้องโดยอัตโนมัติ
รากที่ลงนามตัวเองเป็นเรื่องปกติ การพบรากเช่นนั้นจึงไม่ใช่หลักฐานของปัญหา หน้าที่ของผู้ตรวจสอบคือสร้างเส้นทางจากใบรับรองเซิร์ฟเวอร์ไปยังสมอที่ได้รับมอบหมาย และข้อผิดพลาดห่วงโซ่มักหมายความว่าเส้นทางนั้นไม่อาจทำให้สมบูรณ์ได้
ตรวจว่าสมอของโปรไฟล์ที่ล้มเหลวเป็นผู้ออกที่การติดตั้งยังคงออกใบรับรองอยู่หรือไม่ หากลายนิ้วมือไม่ตรงกับสิ่งใดในบันทึกการติดตั้ง โปรไฟล์ก็แค่ล้าสมัย และการปรับแต่งฝั่งไคลเอนต์ใด ๆ จะไม่แก้ไขสิ่งนั้น
ซ่อมความเชื่อถือโดยไม่ปิดการตรวจสอบ
การแก้ไขระยะสั้นคือปิดการตรวจสอบหรือเพิ่มใบรับรองทุกใบในห่วงโซ่เป็นสมอ ทั้งสองทำให้ข้อความหายไป และทั้งสองเปลี่ยนว่าไคลเอนต์จะยอมรับเซิร์ฟเวอร์ใดตั้งแต่นั้นไป เปิดการตรวจสอบกลับ ติดตั้งสมอที่ตั้งใจ แล้วทดสอบอีกครั้ง
หากห่วงโซ่สร้างได้แล้วแต่มีข้อผิดพลาดอื่นปรากฏขึ้น นั่นคือความคืบหน้า: การตรวจชื่อ วันที่ใช้ได้ และการเพิกถอนเป็นการตรวจแยกกันพร้อมข้อความแยกกัน เก็บคู่ลายนิ้วมือและข้อความข้อผิดพลาดเดิมไว้ด้วยกันในตั๋ว เพื่อให้คนถัดไปเห็นว่าสมอใดถูกโหลดและคาดหวังอันใด คู่ลายนิ้วมือเล็กพอที่จะวางในบันทึกส่งมอบ และครั้งถัดไปจะใช้เวลาห้านาทีแทนบ่ายทั้งบ่าย
รับผู้ออกที่ถูกต้องผ่านช่องทางที่รับรองตัวตนช่องเดียวกับที่ส่งมอบโปรไฟล์ การดึงใบรับรองจากเซิร์ฟเวอร์เพราะชื่อเรื่องดูคุ้นเคยเป็นการกระทำอีกอย่าง และขยายขอบเขตสิ่งที่ไคลเอนต์จะเชื่อถืออย่างเงียบ ๆ