การอ่านฟิลด์สาธารณะของใบรับรองไม่จำเป็นต้องแสดงคีย์ส่วนตัวที่คู่กันเลย และเครื่องมือที่ใช้ทำสิ่งนี้ก็มาพร้อมกับทุกระบบที่ปิดอุโมงค์ VPN ความเสี่ยงอยู่ที่ขั้นก่อนหน้านั้นหนึ่งก้าว คือไฟล์ที่คุณได้รับอาจไม่ใช่ใบรับรองเลย ใบรับรองแบบ PEM ก้อนข้อมูล DER ชุดรวม PKCS#12 และโปรไฟล์ OpenVPNอาจมาพร้อมชื่อเดียวกันแต่บรรจุเนื้อหาต่างกันมาก ดังนั้นจงระบุชนิดของคอนเทนเนอร์ก่อนเลือกคำสั่ง

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

ไฟล์สามแบบที่คุณได้รับคือแบบไหน

ใบรับรอง PEM เป็นข้อความที่มีเครื่องหมาย BEGIN และ END มองเห็นได้ ไฟล์ DER เป็นไบนารีที่ต้องใช้แฟล็กกำหนดรูปแบบอินพุต และชุดรวมเป็นคอนเทนเนอร์ที่อาจเก็บคีย์ไว้ข้างใบรับรอง คำสั่ง file server.crt แยกข้อความออกจากไบนารีได้ในหนึ่งวินาที และการมองบรรทัดแรกก็แยกใบรับรองเปล่าออกจากโปรไฟล์ที่ฝังใบรับรองไว้ได้ การเดาในจุดนี้คือสิ่งที่ทำให้การตรวจสอบกลายเป็นเหตุการณ์

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

การอ่านฟิลด์สาธารณะของใบรับรอง PEM

สำหรับใบรับรองที่คุณได้รับอนุญาตให้ตรวจสอบ คำสั่งย่อย x509 พร้อม -noout จะพิมพ์เฉพาะฟิลด์ที่คุณเลือกและไม่พิมพ์อย่างอื่น การระงับเนื้อหาคือสิ่งที่ทำให้ผลลัพธ์เหลือเพียงเมทาดาทา และนั่นเองทำให้ปลอดภัยพอจะวางในตั๋วงาน ตัวเลือกด้านล่างเป็นฟิลด์สาธารณะ ส่วนที่เหลือระบุไว้ในเอกสาร openssl x509

openssl x509 -in server.crt -noout -subject -issuer -dates -fingerprint -sha256

บนใบรับรองทดสอบที่สร้างขึ้นในเครื่อง คำสั่งนั้นจะพิมพ์บรรทัด subject กับ issuer คู่ notBefore กับ notAfter และลายนิ้วมือ SHA-256 หนึ่งค่า ฟิลด์เหล่านี้ระบุตัววัตถุ แต่ไม่ได้สร้างเส้นทางความเชื่อถือที่ใช้ได้ ซึ่งเป็นงานตรวจสอบแยกต่างหากที่มีคำสั่งและคำตอบของตัวเอง ไฟล์เชนอาจพิมพ์เฉพาะใบรับรองใบแรกเว้นแต่คุณจะวนอ่านไฟล์เอง การเปรียบเทียบสองไฟล์ด้วยวิธีนี้ใช้คำสั่งเดียวและชี้ขาดได้ว่าคู่สนทนานำเสนอไฟล์ใดจริง

ชุดรวมที่เก็บคีย์ไว้ข้างใบรับรอง

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

openssl pkcs12 -in bundle.p12 -nokeys -info -passin env:P12PASS

โปรไฟล์ OpenVPN ฝังเนื้อหาเดียวกันไว้เป็นข้อความ ขอบเขตจึงมองเห็นได้ถ้าคุณรู้ว่าจะดูตรงไหน เนื้อหาสาธารณะอยู่ระหว่าง BEGIN CERTIFICATE กับ END CERTIFICATE ส่วนสิ่งที่อยู่ระหว่าง BEGIN PRIVATE KEY กับบรรทัด END ที่คู่กันคือคีย์ และต้องไม่ออกจากโฮสต์ การคัดลอกโปรไฟล์ทั้งไฟล์จึงเผยทั้งสองอย่าง

การได้ค่าอ้างอิงจากที่อื่น

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

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

การแบ่งปันผลลัพธ์ และสิ่งที่ต้องทำหลังพลาด

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

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

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