ไทม์เอาต์ TLS หกสิบวินาที: ฝั่งไหนหยุดจริง ๆ
จับคู่ความพยายามของไคลเอนต์หนึ่งครั้งกับเหตุการณ์ของเซิร์ฟเวอร์เองก่อนแตะการตั้งค่า TLS ความเงียบ การทิ้งตั้งแต่เนิ่น ๆ และการปฏิเสธที่ระบุชื่อต้องแก้ต่างกัน
ไคลเอนต์ยอมแพ้หลังจากหกสิบวินาทีพร้อมข้อความเกี่ยวกับการเจรจาคีย์ และแล็ปท็อปไม่แสดงความเห็นว่าเพราะอะไร ประโยคนั้นอธิบายความอดทนของไคลเอนต์ ไม่ใช่พฤติกรรมของเซิร์ฟเวอร์ มีสามสถานการณ์ที่ต่างกันสิ้นเชิงที่ทำให้เกิดข้อความนี้ แพ็กเก็ตไม่เคยไปถึงบริการที่ถูกต้อง บริการทิ้งมันก่อนที่จะบันทึกอะไร หรือบริการปฏิเสธมันและบอกเรื่องนี้ในที่ที่ไคลเอนต์มองไม่เห็น การเชื่อมโยงความพยายามครั้งเดียวที่ทั้งสองฝั่งคือสิ่งที่แยกสถานการณ์เหล่านี้ออกจากกัน
ให้ความพยายามหนึ่งครั้งมีตัวตนที่คุณค้นหาได้
จดเวลาเริ่มต้นพร้อมเขตเวลา ชื่อโปรไฟล์ ปลายทางที่ไคลเอนต์แก้ไขได้จริง พอร์ต และการเชื่อมต่อเป็น UDP หรือ TCP หากโปรไฟล์มีรายการระยะไกลหลายรายการ ให้บันทึกว่าความพยายามนั้นเลือกรายการใด เพราะการลองใหม่อาจย้ายไปยังรายการถัดไปโดยไม่เปลี่ยนไฟล์ที่คุณกำลังอ่าน
เอา endpoint จากบันทึกที่ใช้งานอยู่ ไม่ใช่จากการดาวน์โหลดที่คุณจำได้ โปรไฟล์ที่ชี้ไปยังที่อยู่ส่วนตัวนั้นถูกต้องสมบูรณ์และใช้ไม่ได้เลยจากเครือข่ายที่ไม่สามารถกำหนดเส้นทางไปที่นั่น และกรณีนั้นดูเหมือนเซิร์ฟเวอร์ที่ปิดอยู่
จากนั้นขอให้ผู้ดูแลระบบเปิดหน้าต่างเวลาเดียวกันบนอินสแตนซ์ที่ตั้งใจไว้ ความคลาดเคลื่อนของนาฬิกาเป็นเรื่องปกติพอที่ส่วนต่างไม่กี่นาทีจะทำให้เหตุการณ์ที่ตรงกันดูเหมือนไม่มีอยู่ ดังนั้นบันทึกส่วนต่างไว้แทนที่จะสรุปว่าไม่มีเหตุการณ์
สี่การสังเกต สี่ขั้นตอนถัดไปที่ต่างกัน
สิ่งที่เซิร์ฟเวอร์บันทึกเป็นตัวกำหนดสาขา การไม่มีความพยายามใดเลยชี้ไปที่การกำหนดที่อยู่ การขนส่ง หรือเส้นทางไปยังบริการ แพ็กเก็ตขาเข้าที่หายไปก่อนการแลกเปลี่ยนปกติชี้ไปที่ข้อกำหนดของช่องควบคุมของบริการจริง การปฏิเสธที่ระบุชื่อชี้ไปที่วัตถุที่มันระบุ การตอบกลับที่ออกจากเซิร์ฟเวอร์แต่ไม่เคยไปถึงไคลเอนต์ชี้ไปที่เส้นทางขากลับ
บันทึกแอปพลิเคชันที่ว่างเปล่าเป็นหลักฐานที่อ่อนแอกว่าที่เห็น การบันทึกเริ่มต้นที่จุดหนึ่งของการแลกเปลี่ยน และแพ็กเก็ตที่ถูกทิ้งก่อนจุดนั้นไม่ทิ้งร่องรอยไว้ในไฟล์ที่คุณกำลังอ่าน ที่ได้รับอนุญาต ผู้ดูแลระบบสามารถใช้การสังเกตบริการและเครือข่ายเพื่อดูว่ามีอะไรมาถึงหรือไม่
แยกผลลัพธ์ทั้งสี่ไว้ในบันทึกของคุณ การล่อใจคือการรวมมันเป็น “เซิร์ฟเวอร์ไม่ตอบสนอง” และนั่นคือวลีที่ส่งคนไปเปลี่ยนรหัสลับเมื่อปัญหาจริงคือกฎไฟร์วอลล์ บันทึกที่บันทึกเพียงคำว่าไทม์เอาต์ได้ทิ้งความแตกต่างที่คุณเพิ่งจ่ายไป
แก้ไขขั้นตอนที่หลักฐานระบุ
การเชื่อมต่อ TCP ที่เสร็จสมบูรณ์พิสูจน์เพียงว่ามีบางสิ่งยอมรับซ็อกเก็ต มันไม่ได้พิสูจน์ว่าผู้ฟังคือบริการ OpenVPN ที่คุณกำหนดค่าไว้ และเว็บเซิร์ฟเวอร์บนชื่อโฮสต์เดียวกันตอบเบราว์เซอร์ได้อย่างสมบูรณ์แบบในขณะที่ไม่เกี่ยวข้องกับอุโมงค์
หากเซิร์ฟเวอร์รายงานรายการเพิกถอนที่หมดอายุ นั่นคือข้อเท็จจริงที่เฉพาะเจาะจงกว่าการหมดเวลาสุดท้ายของไคลเอนต์มาก และการแก้ไขเป็นของหน่วยงานออกใบรับรองไม่ใช่เครือข่าย หากทั้งสองฝั่งไม่เห็นด้วยเกี่ยวกับการป้องกันช่องควบคุมหรือวัสดุที่ใช้ร่วมกัน การรีเซ็ตรหัสผ่านไม่เปลี่ยนอะไร เพราะการทิ้งเกิดขึ้นก่อนที่จะมีการตรวจสอบข้อมูลประจำตัวใด ๆ
เปลี่ยนสิ่งเดียวที่หลักฐานสนับสนุนจริง ๆ จากนั้นทำซ้ำโปรไฟล์เดิมกับ endpoint เดิม หากการเชื่อมต่อไปได้ไกลกว่า ให้เก็บเหตุการณ์ใหม่ครั้งแรกไว้ เพราะเหตุการณ์นั้นคือขั้นตอนถัดไปของการสืบสวน ไม่ใช่ปัญหาใหม่
grep -nE 'TLS Error|VERIFY ERROR|CRL|handshake failed' /var/log/openvpn/server.log
date -u; timedatectl | head -3
การขยายหน้าต่างเปลี่ยนอะไรจริง ๆ
หกสิบวินาทีคือหน้าต่างแฮนด์เชคของไคลเอนต์ และ เอกสารอ้างอิงไคลเอนต์ของชุมชน ได้บันทึกตัวเลือกที่ปรับค่านี้ การเพิ่มค่านี้ทำให้ไคลเอนต์รอเนิ่นนานขึ้นก่อนยอมแพ้ มันไม่ได้ทำให้บริการที่ไม่มีอยู่ปรากฏขึ้น และไม่ได้ทำให้แพ็กเก็ตที่ถูกปฏิเสธเป็นที่ยอมรับได้
หน้าต่างที่ยาวขึ้นมีประโยชน์โดยชอบธรรมบนลิงก์ที่ช้าหรือเซิร์ฟเวอร์ที่มีภาระหนัก และคุ้มค่าที่จะลองเมื่อคุณมีหลักฐานว่าการแลกเปลี่ยนกำลังคืบหน้าช้า ไม่ใช่ไม่เกิดขึ้นเลย การลองก่อนเพียงแต่เลื่อนการวินิจฉัยเดิมออกไปอีกหนึ่งนาทีและทำให้ไทม์ไลน์อ่านยากขึ้น หากไทม์ไลน์แสดงการแลกเปลี่ยนที่คืบหน้าแล้วหยุด หน้าต่างก็เป็นอาการของภาระ ไม่ใช่การเข้าถึง