เป็นไปได้ไหมที่จะตั้งค่า SSLProtocol ใน Apache สำหรับ VirtualHost (poodle) เดียว?


13

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

<VirtualHost *:443>
    SSLEngine On
    SSLProtocol All -SSLv2 -SSLv3
    ServerName test.mysite.com
    # bunch of other stuff omitted
</VirtualHost>

อย่างไรก็ตามแม้หลังจากรีสตาร์ท apache เว็บไซต์ทดสอบของฉันยังคงอ้างว่าเป็นช่องโหว่ สิ่งนี้คาดว่าจะใช้ได้หรือไม่ ฉันสงสัยว่าฉันต้องตั้งค่าไว้ในการกำหนดค่า SSL ระดับโลกหรือไม่หรือมีสิ่งอื่นที่ทำให้การตั้งค่าไม่สามารถใช้งานและ / หรือทำงานได้

คำตอบ:


16

คุณสามารถตั้งค่า 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โฮสต์เริ่มต้นของคุณอีกครั้ง


ข้อมูลเพิ่มเติมที่เพิ่มโดย @anx เกี่ยวกับการSSLStrictSNIVHostCheckชื่นชมมาก แต่ก็ยังควรจะสังเกตได้จากเอกสารที่อ้างว่าหากการตั้งค่าบนในโฮสต์เสมือนอื่น ๆ ที่ลูกค้าไม่รู้ SNI จะไม่ได้รับอนุญาตให้เข้าถึงโฮสต์เสมือนโดยเฉพาะอย่างยิ่ง
vallismortis

5

คุณสามารถมีโปรโตคอล SSL ที่แตกต่างกันสำหรับแต่ละ Vhost หากพวกเขากำลังฟังบน IP ที่แตกต่างกัน

ตัวอย่างที่มีโฮสต์เฉพาะที่อนุญาตให้ TLSv1 และอื่น ๆ ทั้งหมดอนุญาตให้ใช้ TLSv1.1 และ TLSv1.2 เท่านั้นและหนึ่งโฮสต์ที่อนุญาต TLSv1.2 เท่านั้น:

<VirtualHost *:443>
  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3 -TLSv1
  ServerName test.mysite.com
  # bunch of other stuff omitted
</VirtualHost>

<VirtualHost 10.0.0.2:443>
  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3
  ServerName test2.mysite.com
</VirtualHost>

<VirtualHost 10.0.0.3:443>
  SSLEngine On
  SSLProtocol TLSv1.2
  ServerName test2.mysite.com
</VirtualHost>

นอกจากนี้ถ้าคุณต้องการสำหรับการทดสอบวัตถุประสงค์เท่านั้นคุณสามารถใช้พอร์ตอื่นแทน IP 8443อื่นเช่นที่พบบ่อยพอร์ต
Esa Jokinen

0

หากคุณกำลังใช้ Server Name Indication (SNI) กับ vhost ของคุณแน่นอนคุณไม่สามารถกำหนด SSL หลาย ๆ เวอร์ชันได้

อย่างไรก็ตามหากคุณใช้เซิร์ฟเวอร์เฉพาะคุณอาจจะสามารถเพิ่มที่อยู่ IP อื่นไปยังเซิร์ฟเวอร์ของคุณ ด้วยวิธีนี้คุณจะสามารถใช้ SSL เวอร์ชันที่แตกต่างกันต่อ IP คุณเพียงแค่ต้องเปลี่ยนการตั้งค่า vhost ตามที่คาดหวัง IP: 443


-2

หรือคุณสามารถใช้:

SSLProtocol TLSv1 TLSv1.1 TLSv1.2

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


4
SSLProtocol บรรทัดนี้ดูเหมือนว่าใช้งานได้ดีเท่านั้นเนื่องจาก Apache ไม่ได้บ่นเกี่ยวกับเรื่องนี้ ในความเป็นจริงจะใช้ SSLProtocol ในรายการ VirtualHost แรกเท่านั้น
vallismortis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.