OpenVPN โดยไม่มี CA: peer-fingerprint ตรวจสอบคู่ค้าอย่างไร
ลายนิ้วมือตรึงใบรับรองหนึ่งใบ ไม่ใช่ความลับที่ใช้ร่วมกัน ติดตามว่าสรุปครอบคลุมอะไร แต่ละฝ่ายสร้างรายการที่อนุญาตอย่างไร และการต่ออายุมีค่าใช้จ่ายเท่าใด
การติดตั้งขนาดเล็กหันมาหาลายนิ้วมือเพราะหน่วยออกใบรับรองดูเป็นโครงสร้างพื้นฐานที่ไม่มีใครมีเวลาดูแล สัญชาตญาณนั้นสมเหตุสมผล แต่ทางลัดที่ผู้คนเลือกแทน—การคัดลอกความลับของช่องทางข้อมูลหนึ่งไปยังปลายทั้งสอง—ไม่ใช่ การตั้งค่า peer-fingerprint รักษาโครงสร้าง TLS ไว้ครบถ้วน แต่ละฝ่ายยังคงถือกุญแจส่วนตัวและใบรับรองของตน และแต่ละฝ่ายยังคงตรวจสอบอีกฝ่าย สิ่งที่เปลี่ยนคือจุดที่การตรวจสอบถูกยึดไว้ จากผู้ออกที่เชื่อถือได้ไปยังรายการสรุปที่ตรึงไว้สั้น ๆ เพราะสรุปครอบคลุมใบรับรองทั้งใบไม่ใช่ชื่อ การต่ออายุจึงกลายเป็นการดำเนินการที่ใช้เวลาจริง
ลายนิ้วมือผูกพันกับอะไรจริง ๆ
ลายนิ้วมือของใบรับรองคือสรุปของใบรับรองทั้งใบที่เข้ารหัสแบบ DER ไม่ใช่กุญแจสาธารณะและไม่ใช่ชื่อของ subject ดังนั้นใบรับรองสองใบที่มีชื่อเหมือนกันและกุญแจเดียวกันแต่มีวันหมดอายุต่างกันจึงมีลายนิ้วมือต่างกัน นั่นคือสิ่งที่ทำให้การตรึงแม่นยำ และนั่นก็ทำให้การต่ออายุสร้างความยุ่งยาก การตรึงไม่สามารถหมายถึงการไว้วางใจกุญแจโดยทั่วไปได้ เพราะมันระบุสิ่งหนึ่งในช่วงเวลาหนึ่งของชีวิตมัน ใครก็รู้สรุปได้ และการรู้ไม่ได้พิสูจน์อะไรโดยตัวมันเอง
openssl x509 -in server.crt -noout -fingerprint -sha256
openssl x509 -in client-07.crt -noout -fingerprint -sha256
การถือกุญแจส่วนตัวที่ตรงกันคือสิ่งที่พิสูจน์ว่าคู่ค้ามีใบรับรองนั้น และสรุปคือวิธีที่อีกฝ่ายตัดสินว่าคาดหวังใบรับรองนั้นไว้หรือไม่ การแยกนี้คือเหตุผลที่การออกแบบนี้ไม่ใช่การจัดวางความลับร่วมแบบเก่า กุญแจร่วมพิสูจน์ตัวตนของใครก็ตามที่รู้ไบต์เดียวกัน ขณะที่การตรึงพิสูจน์ใบรับรองหนึ่งใบ อุปกรณ์อื่นได้รายการของตัวเองแทนการคัดลอกความลับเดียวกัน ซึ่งเป็นความต่างเล็ก ๆ ในไฟล์และความต่างใหญ่ในขอบเขตความเสียหาย
แผนที่นั้นสองทาง ไม่สมมาตร
ปลายแต่ละข้างต้องการสองอย่าง คือกุญแจส่วนตัวพร้อมใบรับรอง และคำประกาศว่าจะยอมรับใบรับรองคู่ค้าใด ฝั่งไคลเอนต์คำประกาศนั้นคือสรุปของใบรับรองเซิร์ฟเวอร์ ฝั่งเซิร์ฟเวอร์คือรายการสรุปของไคลเอนต์ที่ลงทะเบียนไว้ ตัวอย่างอย่างเป็นทางการสำหรับการตั้งค่าขนาดเล็ก สำหรับ Community 2.6 แสดงการจัดวางด้วย peer-fingerprint และคุ้มค่าที่จะอ่านก่อนเลือกโมเดลความเชื่อนี้สำหรับการติดตั้งจริง ทั้งสองทิศทางไม่ใช่รายการเดียวที่กลับด้าน และไม่ได้ล้มเหลวในเวลาเดียวกัน
| Verification direction | What is pinned | What never leaves that endpoint | How a wrong pin shows up |
|---|---|---|---|
| Client checks the server | One digest, for the server certificate | The server private key | The client aborts during the TLS handshake |
| Server checks the client | A digest per enrolled client | Each client private key | The server rejects the peer before a tunnel exists |
การเพิ่มอุปกรณ์เป็นการแก้ไขรายการที่อนุญาตบนเซิร์ฟเวอร์ โดยไม่คัดลอกวัสดุส่วนตัวของไคลเอนต์ที่มีอยู่ และไม่ย้ายกุญแจเซิร์ฟเวอร์ไปที่ใด ทั้งสองทิศทางยังล้มเหลวอย่างเป็นอิสระ ซึ่งมีประโยชน์ระหว่างการวินิจฉัย ฝ่ายที่ปิดการจับมือคือฝ่ายที่ความคาดหวังไม่ได้รับการตอบสนอง หากไคลเอนต์ปฏิเสธเซิร์ฟเวอร์ สรุปจะไม่ตรงกับใบรับรองที่นำเสนอ หากเซิร์ฟเวอร์ปฏิเสธไคลเอนต์ สรุปของไคลเอนต์นั้นหายไปจากรายการ หรือไคลเอนต์นำเสนอใบรับรองอื่นที่ไม่ใช่ใบที่ลงทะเบียน
การลงทะเบียน: อุปกรณ์ใหม่เข้าร่วมอย่างไร
สร้างกุญแจและใบรับรองของอุปกรณ์ใหม่ ณ ที่ที่กุญแจส่วนตัวจะอยู่ จากนั้นย้ายเฉพาะสิ่งของสาธารณะไปยังฝ่ายที่ต้องตรึงมัน ส่งสรุปที่คาดหวังผ่านช่องทางที่คุณไว้วางใจอยู่แล้ว และ เปรียบเทียบใบรับรองทั้งใบแทนชื่อที่ดูคุ้นเคย สรุปที่คัดลอกจากดาวน์โหลดที่ยังไม่ตรวจสอบเดียวกันกับใบรับรองพิสูจน์เพียงว่าไฟล์ทั้งสองสอดคล้องกันเท่านั้น นี่คือการตรวจสอบความสอดคล้อง ไม่ใช่การตรวจสอบตัวตน และเป็นวิธีที่เงียบที่สุดที่การออกแบบนี้อ่อนแอลง
บนเซิร์ฟเวอร์ การเพิ่มสรุปคือการเปลี่ยนแปลงการตั้งค่าที่ผ่านตัวจัดการปกติและตามด้วยการเชื่อมต่อใหม่ ยืนยันว่าอุปกรณ์ใหม่เชื่อมต่อได้ และอุปกรณ์ที่สรุปถูกลบไปแล้วไม่เชื่อมต่ออีก การทดสอบที่ครอบคลุมเฉพาะกรณีบวกจะทิ้งรายการที่อนุญาตไว้โดยไม่ตรวจสอบ และนั่นคือสถานะที่คุณจะเป็นในอีกหกเดือน
การต่ออายุคือช่วงเวลาที่แพง
ใบรับรองทุกใบหมดอายุ และใบรับรองใหม่มีสรุปใหม่แม้กุญแจและชื่อจะเหมือนเดิม ภายใต้ผู้ออก การต่ออายุโปร่งใสสำหรับคู่ค้าที่เชื่อถือผู้ออกนั้น ภายใต้การตรึง มันคือเหตุการณ์ลงทะเบียนสำหรับทุกคู่ค้าที่ตรึงใบรับรอง
วางแผนลำดับก่อนวันหมดอายุไม่ใช่หลัง กระจายสรุปใหม่ไปยังฝ่ายที่ตรวจสอบ นำการเปลี่ยนแปลงไปใช้ และจากนั้นจึงเปลี่ยนใบรับรองที่ปลาย ลำดับนั้นไม่ทิ้งหน้าต่างที่ทั้งสองฝ่ายไม่ตรงกันว่าใบรับรองใดเป็นปัจจุบัน ดูแลรายการเองด้วยเพราะรายการที่ตรึงไว้สะสมรายการของอุปกรณ์ที่ปลดระวางเมื่อหลายเดือนก่อน ทุกรายการที่ล้าสมัยคือตัวตนที่ยังพิสูจน์ตัวได้หากกุญแจยังอยู่ ดังนั้นการลบหนึ่งรายการจึงเป็นการดำเนินการด้านความปลอดภัยไม่ใช่การทำความสะอาด
สิ่งที่แผนที่ความเชื่อไม่ได้ตัดสิน
การพิสูจน์ตัวตนเป็นชั้นเดียว และแผนที่ที่ตรึงไว้ไม่ได้บอกอะไรเกี่ยวกับพูลที่อยู่ เส้นทางที่ถูกผลัก MTU ของเส้นทาง หรือนโยบายไฟร์วอลล์ สิ่งเหล่านี้ยังคงเป็นการตั้งค่าแยกที่มีโหมดล้มเหลวแยกกัน อุโมงค์ที่พิสูจน์ตัวตนได้แต่ไม่ส่งข้อมูลผ่านเลยคือการสอบสวนที่ต่างจากอุโมงค์ที่ไม่เคยขึ้นมา
แผนที่ยังขยายไม่ได้ไม่จำกัด และ PKI ที่อิงผู้ออกคือที่ที่การติดตั้งขนาดใหญ่ลงเอย ความชอบนั้นเกี่ยวกับการดำเนินงานไม่ใช่การเข้ารหัส เพราะการเพิ่มและปลดระวางตัวตนผ่านหน่วยงานเดียวถูกกว่าการแก้ไขรายการบนทุกคู่ค้าเมื่อกองเรือเติบโต ที่ใดที่การใช้งานไคลเอนต์ไม่รองรับตัวเลือกนี้ คำตอบคือโมเดลความเชื่อที่เข้ากันได้ซึ่งไคลเอนต์นั้นจัดทำเอกสาร หรือสิ่งทดแทนที่รองรับ การปิดคำเตือนการตรวจสอบไม่ได้เพิ่มการรองรับนั้น และคุณค่าทั้งหมดของการออกแบบคือการตรวจสอบยังคงเกิดขึ้น