คุณสามารถตั้งค่า SSLProtocol สำหรับ VirtualHost แรกในไฟล์กำหนดค่าเท่านั้น ทั้งหมดต่อมารายการ VirtualHost จะได้รับมรดกจากการตั้งค่าที่รายการแรกและเงียบไม่สนใจการตั้งค่าของตัวเองเนื่องจากมีข้อผิดพลาด OpenSSL
มีรายงานข้อผิดพลาดที่สอดคล้องกันสำหรับ mod_sslแต่ตามที่อธิบายไว้ในรายงานข้อผิดพลาดปัญหาต้องได้รับการแก้ไขใน OpenSSL (ใบรับรองนั้นสืบทอด แต่ไม่ใช่โปรโตคอล)
ชุดรหัสจะต้องตั้งค่าอย่างอิสระสำหรับแต่ละ VirtualHost มิฉะนั้นคุณจะจบลงด้วยรายการเริ่มต้นรวมถึงการเข้ารหัสที่ไม่ปลอดภัยจำนวนมาก นอกจากนี้โปรดทราบว่าไคลเอนต์เก่าที่ไม่สนับสนุน Server Name Indication (SNI) จะใช้โฮสต์เริ่มต้น (ยกเว้นกรณีที่ถูกบล็อกSSLStrictSNIVHostCheck
) ซึ่งอาจทำให้การทดสอบของคุณสับสน
ในระยะสั้นคุณควรจะสามารถระบุชุดรหัสที่กำหนดเองและใบรับรองสำหรับแต่ละโฮสต์เสมือน แต่จนกว่าข้อผิดพลาดได้รับการแก้ไขไม่ได้คาดหวังพฤติกรรมที่ถูกต้องกับโปรโตคอลที่กำหนดเองสำหรับแต่ละโฮสต์เสมือน
ฉันพบปัญหานี้กับ Apache 2.4 และ modssl กับ OpenSSL 1.0.1k และฉันคาดหวังว่า Apache 2.2 จะต้องเจอกับปัญหาเดียวกัน
อัปเดต (ตุลาคม 2559):ข้อผิดพลาดของ OpenSSL ถูกทำเครื่องหมายว่าได้รับการแก้ไขในวันที่ 13 ตุลาคม 2559 อย่างไรก็ตามเป็นส่วนหนึ่งของการปิดเปิดของปัญหาจำนวนมากและแม้ว่าจะมีการให้ 'การแก้ไขบางส่วน' แต่ปัญหาก็ไม่ได้รับการแก้ไขอย่างเต็มที่
อัปเดต (เมษายน 2018):ข้อผิดพลาดของ OpenSSL ที่ถูกส่งใหม่ตอนนี้มีแพตช์ให้ใช้งาน (ตั้งแต่วันที่ 9 เมษายน 2018) แพ็ตช์นี้จะเปลี่ยนลักษณะการทำงานของอินสแตนซ์ Apache ที่กำหนดค่าด้วยโฮสต์เสมือน SNI หลายตัว:
ปฏิเสธการเชื่อมต่อที่ไม่เป็นไปตาม vhost SSLProtocol
สิ่งนี้ได้รับการพัฒนาและทดสอบกับ 2.4.27 และในการผลิตกับรุ่นนั้น แพทช์ถูกแก้ไขสำหรับ 2.4.33 และทดสอบเบา ๆ
สิ่งนี้จะตรวจสอบเวอร์ชันของการเชื่อมต่อกับ SSLProtocol ที่กำหนดค่าสำหรับโฮสต์เสมือนที่จับคู่โดยยึดตาม SNI เนื่องจากการเชื่อมต่อเริ่มต้นด้วย SSLProtocol ที่กำหนดค่าสำหรับโฮสต์เริ่มต้นสำหรับพอร์ตโฮสต์เริ่มต้นต้องมีโปรโตคอลทั้งหมดที่จะได้รับการสนับสนุนโดยโฮสต์เสมือนใด ๆ
แพตช์นี้เพิ่มสถานะการส่งคืนเพิ่มเติมของ APR_EMISMATCH ไปยังฟังก์ชัน init_vhost เพื่อให้ ssl_callback_ServerNameIndication callback ที่ลงทะเบียนกับ OpenSSL สามารถส่งการแจ้งเตือนที่ร้ายแรง SSL_AD_PROTOCOL_VERSION สิ่งนี้มีจุดประสงค์เพื่อสร้างการตอบกลับเดียวกันกับ ClientHello ว่ามีการระบุ SSLProtocol ซึ่งไม่รวมรุ่นที่เป็นปัญหา เนื่องจากมีการโทรกลับ SNI ในระหว่างการประมวลผลของ ClientHello และก่อนที่จะมีการตอบสนองจึงดูเหมือนว่าจะทำอย่างนั้น
หากคุณเห็นข้อความของรูปแบบต่อไปนี้:
Rejecting version [version] for servername [hostname]
จากนั้นคุณควรตรวจสอบSSLProtocol
โฮสต์เริ่มต้นของคุณอีกครั้ง
SSLStrictSNIVHostCheck
ชื่นชมมาก แต่ก็ยังควรจะสังเกตได้จากเอกสารที่อ้างว่าหากการตั้งค่าบนในโฮสต์เสมือนอื่น ๆ ที่ลูกค้าไม่รู้ SNI จะไม่ได้รับอนุญาตให้เข้าถึงโฮสต์เสมือนโดยเฉพาะอย่างยิ่ง