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

ความเชื่อที่ว่า: เพิกถอนกับระงับคือสิ่งเดียวกัน

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

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

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

ปลดเซสชันที่ทำงานอยู่ด้วยอินเทอร์เฟซการจัดการ

OpenVPN มีอินเทอร์เฟซการจัดการที่แสดงรายการเซสชันและฆ่าเซสชันหนึ่งได้ด้วยชื่อสามัญ เปิดใช้งานบน localhost เก็บให้ห่างจากอินเทอร์เฟซสาธารณะ และส่งคำสั่งฆ่าเมื่อเซสชันต้องหายไปเดี๋ยวนี้ คำสั่งปิดเฉพาะทันเนลนั้น และไคลเอนต์อื่นทุกตัวยังทำงานต่อไป

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

ยืนยันว่าเซสชันเชื่อมต่ออยู่ก่อนฆ่ามัน เพื่อไม่ต้องตามหาไคลเอนต์ที่ไม่เคยเชื่อมต่อ คำสั่งสถานะด้านล่างพิมพ์สิ่งที่เชื่อมต่ออยู่ในขณะนี้

printf 'status 2\nquit\n' | nc 127.0.0.1 7506
printf 'kill kiosk-14\nquit\n' | nc 127.0.0.1 7506

ถ้าคำสั่งฆ่ารายงานว่าไม่มีไคลเอนต์เช่นนั้น ชื่อสามัญในใบรับรองไม่ใช่สตริงที่คุณพิมพ์ อ่านผลลัพธ์สถานะแทนชื่อไฟล์โปรไฟล์

CRL ควบคุมอะไรจริง ๆ

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

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

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

openssl crl -in /etc/openvpn/server/crl.pem -noout -text | sed -n '1,14p'
ls -l /etc/openvpn/server/crl.pem

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

การกู้คืนบันทึก อย่างระมัดระวัง

การกู้คืนใบรับรองหมายถึงการกลับบันทึกในฐานข้อมูลการออกใบรับรองและเผยแพร่รายการใหม่ easy-rsa 3 เก็บฐานข้อมูลนั้นเป็น index.txt ใต้ไดเรกทอรี PKI ขณะที่รูปแบบเก่าใช้การจัดเรียงอื่น บรรทัดเริ่มด้วยตัวอักษรสถานะและวันหมดอายุ บรรทัดที่เพิกถอนแล้วจะแทรกเวลาเพิกถอนก่อนที่จะดำเนินต่อด้วยหมายเลขลำดับ ชื่อไฟล์ใบรับรอง และชื่อที่แยกแยะ การใส่บรรทัดกลับหมายถึงการลบเวลาเพิกถอนนั้นและกลับตัวอักษร ส่วนที่เหลือปล่อยไว้ตามเดิม

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

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

cp /etc/easy-rsa/pki/index.txt /root/index.txt.$(date +%F-%H%M)
grep -c '^R' /etc/easy-rsa/pki/index.txt
easyrsa gen-crl

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

ตรวจสอบว่าคดีนี้สมควรได้คันโยกใด

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

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

openssl crl -in /etc/openvpn/server/crl.pem -noout -text | grep -c 'Serial Number'
printf 'status 2\nquit\n' | nc 127.0.0.1 7506

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

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