ไม่พบ AES-256-GCM: ความสามารถของไคลเอนต์หรือการเจรจา
ข้อผิดพลาด OpenVPN สองแบบดูคล้ายกัน: บิลด์ที่ไม่มีอัลกอริทึมและคู่ที่ไม่มีไซเฟอร์ร่วมกัน อ่าน --show-ciphers และ data-ciphers ก่อนแก้ไขโปรไฟล์
โปรไฟล์ OpenVPN ที่ใช้งานได้ที่อื่นรายงานว่าไม่พบ AES-256-GCM หรือคู่ปลายทางไม่มีไซเฟอร์ร่วมกัน และความคิดแรกคือแก้ไขโปรไฟล์ ข้อความสองแบบนี้อธิบายความล้มเหลวที่ต่างกัน แบบหนึ่งบอกว่าโปรแกรมในเครื่องไม่มีอัลกอริทึมนั้น อีกแบบบอกว่าทั้งสองฝั่งมีอัลกอริทึมแต่ไม่มีตัวเลือกร่วมกัน การแก้ไขโปรไฟล์ไม่ช่วยแก้ทั้งสองแบบจนกว่าคุณจะรู้ว่ากำลังเจอแบบใด
อ่านข้อความข้อผิดพลาดที่แน่นอนและโปรแกรมที่สร้างมันขึ้นมา
ตัดสินว่าคุณมีข้อผิดพลาดแบบใด
ข้อความเกี่ยวกับไซเฟอร์ที่หาไม่พบมาจากการวิเคราะห์ตัวเลือกบนเครื่องก่อนที่จะมีการส่งแพ็กเก็ตใด ๆ หมายความว่าไฟล์ที่รันได้ตรงหน้าคุณ หรือไลบรารีที่มันเชื่อมโยงอยู่ ไม่ได้เสนออัลกอริทึมนั้น ข้อความเกี่ยวกับการไม่มีไซเฟอร์ร่วมกันมาทีหลัง ระหว่างการเจรจา และหมายความว่าทั้งสองฝั่งรองรับไซเฟอร์แต่ตกลงกันในตัวเดียวไม่ได้
ความแตกต่างนี้สำคัญเพราะแบบหนึ่งเป็นปัญหาเวอร์ชันซอฟต์แวร์ อีกแบบเป็นปัญหาการกำหนดค่า แบบแรกตัดสินด้วยหมายเลขเวอร์ชัน แบบที่สองตัดสินด้วยการเทียบรายการสองรายการ
ช่องว่างความสามารถในเครื่อง
บิลด์ชุมชนรุ่นเก่าก่อนค่าปริยายสมัยใหม่ และแอปเดสก์ท็อปอาจพามอเตอร์ของตัวเองซึ่งต่างจากแพ็กเกจบรรทัดคำสั่งที่ติดตั้งข้าง ๆ ควรตรวจบนไฟล์ที่รันได้ซึ่งเริ่มการเชื่อมต่อจริง แล้วเลือกบิลด์ที่รองรับแทนที่จะสอนอัลกอริทึมใหม่ให้โปรแกรมเก่า
openvpn --version openvpn --show-ciphers | grep -i gcm openvpn --show-tls | head -5
ถ้า AES-256-GCM ไม่ปรากฏในรายการนั้น ไม่มีบรรทัดโปรไฟล์ใดจะเพิ่มมันได้ ทางแก้คือไคลเอนต์ใหม่กว่าหรือบิลด์อื่น และข้อจำกัดของฝั่งเก่าจะกลายเป็นคำถามการออกแบบแยกต่างหาก
ในไคลเอนต์ที่อิง OpenVPN 3 มอเตอร์และคำสั่งที่ยอมรับต่างจากสายชุมชน 2.x ข้อความโปรไฟล์เดียวกันจึงล้มเหลวได้ด้วยเหตุผลที่ไม่เกี่ยวกับรายการไซเฟอร์เลย
ช่องว่างในการเจรจา
เมื่อทั้งสองฝั่งลงรายการอัลกอริทึม คำถามที่เหลือคือแต่ละฝั่งเสนอรายการใด OpenVPN ชุมชนเปลี่ยนชื่อคำสั่งเจรจา: ncp-ciphers ใน 2.4 กลายเป็น data-ciphers ใน 2.5 และใน 2.6 บรรทัด cipher เก่าทำหน้าที่ส่วนใหญ่เพื่อความเข้ากันได้และการถอยกลับ ไม่ใช่กำหนดชุดที่เจรจากัน
นี่คือเหตุผลที่แก้ไขเพียงบรรทัด cipher เก่าอาจทิ้งรายการเจรจาไว้ไม่ถูกแตะต้อง บรรทัดเก่ายังสำคัญต่อการถอยกลับ และนั่นเป็นงานแยกต่างหาก การสับสนสองอย่างนี้ทำให้เกิดการแก้ไขที่ไม่เปลี่ยนอะไรที่มองเห็นได้
openvpn --version | head -2 grep -n -E '^(data-ciphers|ncp-ciphers|cipher|tls-cipher)' server.conf client.ovpn
เทียบรายการของทั้งสองปลายและข้อความปฏิเสธของเซิร์ฟเวอร์ ถ้าส่วนตัดกันว่างเปล่า ให้จัดรายการให้ตรงกันโดยเจตนาแทนการคัดลอกค่าจากบทความที่เขียนสำหรับเวอร์ชันอื่น รายการที่กว้างเกินไปจะทำให้ทุกการเชื่อมต่ออ่อนลงอย่างเงียบ ๆ รายการที่แคบเกินไปจะตัดฝั่งที่คุณต้องการเก็บไว้
รักษาความเข้ากันได้ให้ชัดเจน
การถอยกลับเพื่อฝั่งเก่าหนึ่งฝั่งเป็นการตัดสินใจที่มีต้นทุน: การติดตั้งทั้งหมดยอมรับตัวเลือกที่อ่อนแอกว่าเพื่อให้อุปกรณ์หนึ่งเครื่องเชื่อมต่อได้ เขียนไว้เช่นนั้น และจำกัดเฉพาะฝั่งที่ต้องการ
สองเงื่อนไขตัดสินผลลัพธ์ ถ้าข้อผิดพลาดอยู่ในเครื่อง ให้เปลี่ยนบิลด์ ถ้าข้อผิดพลาดอยู่ที่การเจรจา ให้จัดรายการทั้งสองปลายให้ตรงกันและบันทึกว่ารองรับเวอร์ชันใด
จากนั้นรายงานข้อผิดพลาดที่แน่นอนพร้อมแนบผลลัพธ์ของเวอร์ชันและความสามารถ คู่นี้แยกอัลกอริทึมที่หายไปออกจากความไม่ลงรอย และหยุดรอบถัดไปของการแก้ไขตามการคาดเดาก่อนจะเริ่ม