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

ความลับสองแบบ เจ้าของสองคน

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

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

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

คำถามสามข้อที่ตัดสินการแบ่งแยก

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

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

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

สิ่งที่ไคลเอนต์ต้องการจริง ๆ

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

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

เพิกถอนผู้ใช้คนเดียวโดยไม่แตะเกตเวย์

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

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

คำสั่งด้านล่างตรวจสอบใบรับรองของไคลเอนต์แล้วเพิกถอนผ่านหน่วยออกใบรับรองแบบ OpenSSL ซึ่งเป็นขั้นตอนที่ easy-rsa ห่อไว้:

openssl x509 -in client.crt -noout -subject -serial
openssl ca -config openssl.cnf -revoke client.crt
openssl ca -config openssl.cnf -gencrl -out crl.pem

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

แยกสำรองข้อมูลให้ห่างกันพอ ๆ กับความลับ

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

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

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