คีย์ 8192 บิตทำให้การจับมือหยุดชะงัก ส่วน DH 1024 บิตถูกปฏิเสธ
ข้อผิดพลาดขนาดสองแบบที่มีวิธีแก้ตรงข้ามกัน: คีย์ที่ใหญ่เกินไปเผาเวลาจับมือจนฝ่ายตรงข้ามหมดเวลา ขณะที่กลุ่ม DH ขนาดเล็กถูกปฏิเสธก่อนเริ่ม
เซิร์ฟเวอร์หนึ่งมีไคลเอนต์ที่ค้างสักพักแล้วเชื่อมต่อใหม่ ส่วนอีกตัวปฏิเสธการเชื่อมต่อทันทีด้วยข้อความเกี่ยวกับขนาดคีย์ ดูเหมือนเป็นบั๊กคนละตัว แต่จริง ๆ แล้วเป็นบั๊กเดียวกันที่ชี้ไปคนละทิศ ความเข้ารหัสของการจับมือมีต้นทุนที่เพิ่มตามขนาดพารามิเตอร์ และยังมีพื้นขั้นต่ำที่ไลบรารีสมัยใหม่ไม่ลงไปต่ำกว่านั้น การกำหนดขนาดของวัสดุคือรายการตรวจสอบ และข้อแรกคือตัดสินว่าคุณกำลังเจอข้อผิดพลาดแบบไหนจริง ๆ
อ่านความล้มเหลวก่อนจะสร้างอะไรใหม่
เวลาเป็นตัวบอกคุณได้เกือบทั้งหมด การจับมือที่ใช้เวลาหลายวินาทีแล้วตายไปมักหมายความว่าการคำนวณใช้เวลานานเกินความอดทนของฝ่ายตรงข้าม ซึ่งชี้ไปที่พารามิเตอร์ที่ใหญ่เกินไปสำหรับฮาร์ดแวร์หรือสำหรับเวลาที่จำกัด การปฏิเสธทันทีที่ระบุขนาดคีย์หรือขนาดกลุ่มชี้ไปอีกทาง ไปยังวัสดุที่ไลบรารีจะไม่ยอมรับเลย
สองอย่างนี้ต้องแก้ตรงข้ามกัน และนี่คือจุดที่ความพยายามส่วนใหญ่ผิดพลาด การสร้างพารามิเตอร์ 8192 บิตใหม่บนไคลเอนต์ที่ปฏิเสธกลุ่มเล็กไปแล้วจะทำให้กรณีช้าซ้ำร้ายลง โดยไม่ช่วยกรณีเร็วเลย จดว่าคุณเห็นอาการแบบไหนก่อนจะแตะไฟล์
จากนั้นตรวจสอบว่าฝ่ายตรงข้ามถูกขอให้ทำอะไร เซิร์ฟเวอร์ที่ตั้งค่าสำหรับกลุ่มฟิลด์จำกัดขนาดใหญ่บังคับให้ไคลเอนต์ทุกตัวใช้เวลา CPU เท่ากันในการเจรจาใหม่ทุกครั้ง ไม่ใช่แค่ตอนเชื่อมต่อ ถ้าปัญหาเกิดเป็นระยะสม่ำเสมอแทนที่จะเกิดตอนเริ่มต้น ช่วงเวลานั้นคือเบาะแสที่ชัดเจนว่าการตั้งค่าใดมีราคาแพง การเจรจาใหม่คำนวณทั้งหมดซ้ำ การหยุดชะงักที่กลับมาทุกชั่วโมงจึงมักเป็นต้นทุนเดิมที่ต้องจ่ายอีกครั้ง
กรณีช้า: วัสดุที่ฮาร์ดแวร์รับไม่ไหว
งานของ Diffie-Hellman และ RSA เพิ่มขึ้นเร็วตามขนาดคีย์ และทั้งหมดเกิดขึ้นก่อนที่ทราฟฟิกใด ๆ จะไหลผ่านอุโมงค์ บนเราเตอร์เล็กหรือไคลเอนต์ที่ใช้พลังงานต่ำ กลุ่มที่ใหญ่พออาจดันการแลกเปลี่ยนให้เลยเวลาที่จำกัดของอีกฝ่าย ทำให้การเชื่อมต่อลองใหม่หรือดูเหมือนค้างไปเฉย ๆ โดยไม่มีข้อผิดพลาด
วิธีแก้คือลดลงไปยังขนาดที่ทุกฝ่ายรองรับและทุกอุปกรณ์คำนวณได้อย่างสบาย คีย์ RSA 2048 บิตและกลุ่ม 2048 บิตยังเป็นเส้นฐานที่เข้ากันได้กว้าง การใหญ่ขึ้นช่วยได้เฉพาะเมื่อทุกฝ่ายเห็นด้วยและ CPU จ่ายไหวในการเจรจาใหม่ทุกครั้ง ทุกอย่างที่สูงกว่าเส้นฐานนั้นคือการแลกเปลี่ยนที่ตั้งใจ ไม่ใช่การอัปเกรด
ขนาดไม่ใช่คะแนน และตัวเลขที่มากที่สุดในตารางเปรียบเทียบไม่ใช่ตัวเลือกที่ถูกโดยอัตโนมัติ เลือกค่าที่เล็กที่สุดที่นโยบายของคุณอนุญาตและทุกฝ่ายยอมรับ แล้ววัดการจับมือแทนที่จะสมมติว่าดีขึ้น กลุ่มที่เล็กกว่าซึ่งยังหมดเวลาบอกคุณว่าขนาดไม่เคยเป็นเรื่องทั้งหมด
กรณีเร็ว: กลุ่มที่ไลบรารีปฏิเสธ
บิลด์ OpenSSL สมัยใหม่ปฏิเสธกลุ่มฟิลด์จำกัดที่เล็กที่สุดโดยตรง และระดับความปลอดภัยที่สูงขึ้นก็ดันพื้นขั้นต่ำให้สูงขึ้นไปอีก เฟิร์มแวร์เราเตอร์ที่พกไฟล์พารามิเตอร์อายุหลายทศวรรษมาเป็นแหล่งที่พบบ่อย และอาการคือการเชื่อมต่อที่ล้มเหลวทันทีด้วยข้อความที่ระบุชื่อกลุ่มหรือขนาดคีย์ ไม่มีอะไรในความล้มเหลวนั้นที่เป็นแบบเป็นพัก ๆ และนั่นคือสิ่งที่ทำให้สังเกตได้ง่าย
แทนที่ไฟล์แทนการแก้ไขคอนฟิกเพื่อข้ามการตรวจสอบ สร้างกลุ่มปัจจุบัน ตรวจสอบความถูกต้อง แล้วติดตั้งในที่ที่เดมอนอ่านจริง ๆ เก็บไฟล์เก่าไว้จนกว่าไคลเอนต์จะเชื่อมต่อกับไฟล์ใหม่ได้สำเร็จ:
openssl dhparam -out /etc/openvpn/ffdhe2048.pem 2048
openssl dhparam -in /etc/openvpn/ffdhe2048.pem -check -noout
ls -l /etc/openvpn/ffdhe2048.pemคำสั่งตรวจสอบจะตรวจสอบไฟล์และไม่พิมพ์อะไรที่เป็นประโยชน์เมื่อผ่าน รายการยืนยันว่าคุณแทนที่ไฟล์ที่บริการโหลด ไม่ใช่สำเนาเก่าที่อยู่ข้าง ๆ ชี้คอนฟิกไปที่เส้นทางนั้น รีสตาร์ทเดมอน และยืนยันว่าไคลเอนต์ที่เคยล้มเหลวตอนนี้ทำการจับมือจนสำเร็จ
ถ้าเซิร์ฟเวอร์ตั้งระดับความปลอดภัยหรือโปรไฟล์ใบรับรองด้วย ให้อ่านสิ่งเหล่านั้นก่อนสรุปว่ากลุ่มผิด โปรไฟล์ที่ต้องการคลาสที่เข้มงวดกว่าอาจปฏิเสธวัสดุที่ค่าเริ่มต้นจะยอมรับ และการลบการตั้งค่านั้นเป็นการเปลี่ยนแปลงที่แคบกว่าการปิดการตรวจสอบทั้งระบบ
เลือกขนาดให้เหมาะกับฝ่ายตรงข้ามและฮาร์ดแวร์
หาว่าปลายทางไกลรับอะไรได้ก่อนจะสร้างอะไรแปลก ๆ อุปกรณ์ที่เก่าเกินไปสำหรับกลุ่ม 2048 บิตคืออุปกรณ์ที่ต้องเปลี่ยน เพราะการชี้เซิร์ฟเวอร์ไปยังกลุ่มที่อ่อนแอกว่าเพียงแปลงข้อร้องเรียนเรื่องความเข้ากันได้ให้กลายเป็นเหตุขัดข้อง วิธีแก้ที่ยั่งยืนมุ่งไปยังซอฟต์แวร์ใหม่กว่า ไม่ใช่พารามิเตอร์ที่เก่ากว่า ข้อยกเว้นชั่วคราวทุกอย่างในด้านนี้มักมีทางกลายเป็นคอนฟิกถาวร
เมื่อ CPU ของเซิร์ฟเวอร์เป็นขีดจำกัด ให้เปลี่ยนอัลกอริทึมแทนการลดต่ำกว่านโยบาย การแลกเปลี่ยนคีย์แบบเส้นโค้งวงรีอย่าง X25519 ถูกกว่ากลุ่มฟิลด์จำกัดขนาดใหญ่มากและได้รับการรองรับกว้างขวาง ซึ่งทำให้เป็นคำตอบที่ดีกว่าต่อข้อร้องเรียนเรื่องประสิทธิภาพมากกว่าโมดูลัส RSA ที่เล็กลง
ไม่ว่าคุณจะเลือกอะไร ทดสอบด้วยการเชื่อมต่อจริงหนึ่งครั้งและดูว่าการจับมือใช้เวลานานเท่าไร ไม่ใช่แค่ว่าสุดท้ายเชื่อมต่อได้หรือไม่ การเชื่อมต่อที่สำเร็จในสิบสองวินาทีมีสาเหตุรากเดียวกันกับการเชื่อมต่อที่ล้มเหลวในสิบห้าวินาที
บันทึกตัวเลือกไว้เพื่อให้การสร้างใหม่ล้มไม่ได้
เก็บไฟล์พารามิเตอร์ไว้ภายใต้การจัดการคอนฟิกและเขียนขนาด เหตุผล และวันที่ไว้ข้าง ๆ เซิร์ฟเวอร์ที่สร้างใหม่ซึ่งสร้างค่าเริ่มต้นของตัวเองอย่างเงียบ ๆ คือทางที่ข้อผิดพลาดเดิมกลับมาอีกครั้งในหกเดือนโดยไม่มีใครอธิบายการตัดสินใจเดิมได้
บันทึกข้อมูลเดียวกันไว้ข้าง endpoint และโปรไฟล์ เพื่อให้การทบทวนไม่ต้องสร้างย้อนกลับจากขนาดไฟล์ ช่วยให้เมื่อการเชื่อมต่อครั้งถัดไปค้าง บันทึกนั้นคือความต่างระหว่างการตรวจห้านาทีกับการสอบสวนใหม่ มันยังกันไม่ให้วิศวกรคนถัดไปแก้กรณีช้าด้วยวิธีแก้ที่ทำไว้สำหรับกรณีเร็ว