เว็บเซิร์ฟเวอร์รู้ได้อย่างไรว่าคู่คีย์ใดควรใช้กับการถอดรหัส SSL


18

มันเป็นความเข้าใจของฉันว่าเมื่ออาปาเช่ได้รับการร้องขอให้เป็นหนึ่งในพอร์ต TCP มันจะฟังบน (เช่น 80, 443) Hostก็จะตัดสินใจว่าโฮสต์มีการร้องขอโดยดูที่ส่วนหัว เซิร์ฟเวอร์จะทราบว่าโฮสต์เสมือนใดที่ควรเปลี่ยนเส้นทางการร้องขอไป

แต่มันทำงานกับ HTTP ผ่าน SSL / TLS ได้อย่างไร เนื่องจากคำขอ HTTP ทั้งหมดกำลังถูกเข้ารหัส (อย่างน้อยนั่นคือสิ่งที่ฉันเชื่อว่าฉันได้อ่านที่ไหนสักแห่ง) ข้อมูลส่วนหัวจึงสามารถอ่านได้หลังจากเซิร์ฟเวอร์ถอดรหัสข้อมูลเท่านั้น แต่เพื่อที่จะถอดรหัสมันจำเป็นต้องรู้คู่กุญแจที่จะใช้เพราะคุณสามารถติดตั้งใบรับรอง SSL หลายอันบนเว็บเซิร์ฟเวอร์

ดังนั้นเซิร์ฟเวอร์จะทราบได้อย่างไรว่าต้องใช้รหัสใดในการถอดรหัส


ฉันเดา :

ฉันนึกภาพได้ว่าการจับมือ TLS ให้ข้อมูลที่จำเป็น


เกี่ยวกับการตั้งค่าสถานะ"เป็นไปได้ซ้ำกัน" :

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


ที่เกี่ยวข้อง: serverfault.com/questions/126072/…
Ilmari Karonen


ฉันยอมรับว่าคำตอบนั้นคล้ายกันมาก แต่ฉันเชื่อว่าคำถามนั้นแตกต่างกันมาก
เปาโล

คำตอบ:


29

เริ่มแรกเว็บเซิร์ฟเวอร์ไม่รู้ นี่คือเหตุผลที่คุณต้องการที่อยู่ IP ที่แยกต่างหากสำหรับ SSL vhost ทุกตัวที่คุณต้องการโฮสต์บนเซิร์ฟเวอร์ ด้วยวิธีนี้เซิร์ฟเวอร์รู้ว่าเมื่อการเชื่อมต่อเข้ามาใน IP X เขาจำเป็นต้องใช้การกำหนดค่า (รวมถึงใบรับรอง) สำหรับ vhost ที่เกี่ยวข้อง

สิ่งนี้เปลี่ยนไปด้วยการระบุชื่อเซิร์ฟเวอร์ส่วนขยาย TLS ที่อนุญาตให้ไคลเอ็นต์ระบุชื่อโฮสต์ที่ต้องการในกระบวนการจับมือ ส่วนขยายนี้ใช้ในระบบปฏิบัติการสมัยใหม่ทั้งหมด แต่เบราว์เซอร์หรือเซิร์ฟเวอร์เก่าไม่รองรับดังนั้นหากคุณคาดหวังว่าลูกค้าจะยังคงใช้ IE 6 บน WinXP คุณจะโชคไม่ดี


2
หากใครบางคนยังใช้ XP อยู่พวกเขาก็ไม่สมควรที่จะเยี่ยมชมเว็บไซต์ของฉันอีกต่อไป;)
เปาโล

2
ต้องระมัดระวังเป็นพิเศษเมื่อ จำกัด ลูกค้าด้วยวิธีนี้ (เบราว์เซอร์ไม่ใช่คน) ธุรกิจจำนวนมากหลายแห่งไม่ปรับรุ่นหน้าต่างได้ดีมากและเช่นเดียวกันกับ tru กับผู้จำหน่ายโทรศัพท์ Android บางรายพวกเขามักจะไม่อัปเกรดระบบปฏิบัติการเลย (หรืออย่างน้อยก็ไม่มาก) Windows XP อยู่ที่ 8% และส่วนแบ่งการตลาด android 4.4 ที่ผ่านมานั้นค่อนข้างมาก
coteyr

ในกรณีที่เซิร์ฟเวอร์ขาดการสนับสนุน SNI เป็นไปได้ที่จะใช้พร็อกซีที่มีการสนับสนุน SNI ด้านหน้าเซิร์ฟเวอร์โดยไม่มีการสนับสนุน SNI
kasperd

1
@coteyr ผู้ใช้ XP ส่วนใหญ่ที่เหลืออยู่ในประเทศจีน มีการใช้งานน้อยมากที่อื่นโชคดีอย่างน้อยบนอินเทอร์เน็ต
Michael Hampton

7

ดูเหมือนว่าคุณมีความเข้าใจผิดเกี่ยวกับ TLS / SSL คำขอ HTTP ไม่ได้ถูกเข้ารหัสโดยกุญแจสาธารณะของเซิร์ฟเวอร์ มันถูกเข้ารหัสโดยการเข้ารหัสแบบสมมาตรโดยใช้กุญแจเจรจาในการจับมือก่อนหน้านี้

คำอธิบายสั้น ๆ ของการจับมือ TLS: เซิร์ฟเวอร์และไคลเอนต์เจรจาต่อรอง ciphersuite, คีย์สมมาตรและรายละเอียดอื่น ๆ เพื่อป้องกันไม่ให้ MITM เซิร์ฟเวอร์มักจะส่งใบรับรอง (ลูกโซ่) ไปยังลูกค้าและรับรองความถูกต้องของการจับมือกันโดยใช้กุญแจในใบรับรอง (นอกจากนี้ยังมีตัวแปรอื่น ๆ เช่นการรับรองความถูกต้องของไคลเอ็นต์หรือ TLS-PSK แต่ไม่ได้ใช้กับ HTTP มาก) ไคลเอ็นต์สามารถตรวจสอบใบรับรองได้ (ตามปกติ) หรือเพิกเฉย

แม้ว่า SNI มีความสำคัญเมื่อใช้ใบรับรอง TLS หลายรายการที่ IP เดียว แต่ก็ไม่จำเป็นสำหรับเซิร์ฟเวอร์ที่สามารถถอดรหัสคำขอได้ หากไม่มี SNI เซิร์ฟเวอร์จะไม่ทราบว่าควรส่งห่วงโซ่ใบรับรองใดดังนั้นเซิร์ฟเวอร์มักจะเลือกหนึ่ง (เช่น vhost แรก) ซึ่งอาจเป็นวิธีที่ผิด หากเซิร์ฟเวอร์เลือกห่วงโซ่ใบรับรองที่ไม่ถูกต้องไคลเอนต์ควรปฏิเสธ (ดังนั้นจึงไม่ดำเนินการกับการส่งคำขอ HTTP) อย่างไรก็ตามหากลูกค้าเพิกเฉยใบรับรอง (หรือหากใบรับรองที่ไม่ถูกต้องถูกทำเครื่องหมายว่าเชื่อถือได้สำหรับเว็บไซต์นี้) ก็สามารถดำเนินการต่อได้สำเร็จ เนื่องจากคีย์สมมาตรที่ใช้สำหรับการเข้ารหัสไม่ได้ขึ้นอยู่กับใบรับรอง (TLS ได้รับการออกแบบให้ทำงานโดยไม่มีใบรับรอง) เซิร์ฟเวอร์จึงสามารถถอดรหัสได้

เพียงเล็กน้อยทราบว่าทำไมฉันเขียนเกี่ยวกับ TLS ในขณะที่คุณถามเกี่ยวกับ SSL: TLS เป็น SSL รุ่นใหม่ SSL ทุกรุ่นถือว่าไม่ปลอดภัยสำหรับการใช้งานทั่วไปดังนั้นเราจึงใช้ TLS (1.0, 1.1, 1.2) เป็นส่วนใหญ่


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

ฉันรู้ว่าคำว่า "ใบรับรอง SSL" มักใช้กับ TLS บ่อยครั้ง ฉันพยายามหลีกเลี่ยงพวกเขา แต่ฉันไม่แน่ใจว่าคุณ (หรือคนอื่น ๆ ) รู้คำว่า TLS หรือไม่
v6ak
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.