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

ระบุว่าไลบรารีใดและนโยบายใดมีผลบังคับใช้

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

openvpn --version | head -3
openssl version -a

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

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

แยกสามสิ่งที่อาจถูกปฏิเสธ

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

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

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

เปลี่ยนอินพุต ไม่ใช่เกณฑ์

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

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

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

หากจำเป็นต้องลด ให้จำกัดขอบเขตและบันทึกไว้

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

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

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

จากนั้นตรวจสอบตัวตนและการป้องกัน

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

openssl x509 -in /etc/openvpn/client.crt -noout -subject -dates -text | grep -E 'Signature Algorithm|Public-Key'
openvpn --show-tls | head -20

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

การส่งต่อที่ผ่านการตรวจสอบระบุว่านโยบายใดปฏิเสธอินพุตใด อะไรเปลี่ยนไป และอะไรยังคงได้รับการยอมรับผลลัพธ์ «มันทำงานได้กับ SECLEVEL=0» เป็นการสังเกตเกี่ยวกับการเชื่อมต่อครั้งเดียว ไม่ใช่การประเมินความปลอดภัยของการติดตั้ง

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