ฉันรู้ว่าต้องใช้ IP เฉพาะสำหรับการตั้งค่า SSL จะเกิดอะไรขึ้นถ้าเราเพิ่ม SSL สำหรับโดเมนที่แชร์ IP (NameVirtualHost)
ฉันรู้ว่าต้องใช้ IP เฉพาะสำหรับการตั้งค่า SSL จะเกิดอะไรขึ้นถ้าเราเพิ่ม SSL สำหรับโดเมนที่แชร์ IP (NameVirtualHost)
คำตอบ:
ฉันคิดว่าเป็นความคิดที่ดีที่จะอธิบายว่าปัญหาคืออะไรกับโฮสต์เสมือนจริงและ SSL / TLS
เมื่อคุณเชื่อมต่อกับเซิร์ฟเวอร์ apache ผ่าน HTTP คุณจะส่งชุดของส่วนหัว http พร้อม พวกเขามีลักษณะเช่นนี้:
GET /index.html HTTP/1.1
Host: www.nice-puppies.com
หากคุณมี apache โฮสต์เสมือนจะดูที่ช่องโฮสต์จากนั้นดึงข้อมูล index.html ที่เหมาะกับคุณ ปัญหาคือเมื่อคุณเพิ่ม SSL / TLS เซิร์ฟเวอร์ตั้งค่าการเข้ารหัสก่อนที่คุณจะส่งคำขอ http ของคุณ ดังนั้นเซิร์ฟเวอร์จะไม่ทราบว่าคุณกำลังจะไปที่ www.nice-puppies.com หรือ www.evil-haxxor.com จนกว่าจะมีการตรวจสอบสิทธิ์ / การเข้ารหัสเสร็จสมบูรณ์ เซิร์ฟเวอร์ไม่สามารถเดาได้ (เนื่องจากการส่งใบรับรองผิดให้ข้อความผิดพลาดที่น่ารังเกียจ)
ทางออกหนึ่งคือใบรับรองไวด์การ์ด (ตามที่กล่าวไว้ข้างต้น) ซึ่งใช้ได้สำหรับ * .nice-puppies.com ด้วยวิธีนี้คุณสามารถใช้ใบรับรองเดียวกันสำหรับหลายโดเมน แต่คุณไม่มีใบรับรอง * .com (โอเคคุณทำได้ แต่มันจะไม่ดีสำหรับคนอื่น ๆ ) ดังนั้นโดยทั่วไปคุณจะต้องมี IP แยกต่างหากสำหรับแต่ละ โดเมน HTTPS
ทางออกที่แท้จริงของปัญหานี้คือ "การระบุชื่อเซิร์ฟเวอร์":
http://en.wikipedia.org/wiki/Server_Name_Indication
เป็นเพียงการเริ่มต้นที่จะเผยแพร่ในเซิร์ฟเวอร์และเว็บไคลเอ็นต์ดังนั้นจึงไม่ใช่สิ่งที่คุณสามารถใช้ได้ตอนนี้ แต่หวังว่าในอีกไม่กี่ปีข้างหน้านี้จะไม่เป็นปัญหาใหญ่
ปัญหาคือใบรับรอง SSL ถูกผูกไว้กับที่อยู่ IP ไม่ใช่ชื่อโฮสต์ เมื่อการเชื่อมต่อเข้ามาในที่อยู่ IP สำหรับการร้องขอ HTTPS การดำเนินการครั้งแรกคือการสร้างการสื่อสาร SSL โดยส่งผ่านใบรับรองเซิร์ฟเวอร์และ / หรือใบรับรองไคลเอ็นต์ ในระหว่างขั้นตอนนี้ของการเชื่อมต่อจับมือเซิร์ฟเวอร์ Apache ไม่มีทางรู้ว่าสิ่งที่ร้องขอจะผ่านมาสำหรับ สิ่งนี้แตกต่างกันสำหรับทราฟฟิก HTTP (ไม่ใช่ SSL) เนื่องจากหลังจากการเชื่อมต่อสำเร็จแล้วเซิร์ฟเวอร์ Apache สามารถกำหนดค่าโฮสต์เสมือนที่จะใช้หากไคลเอนต์ส่งHost
ส่วนหัวหรือมิฉะนั้นจะส่งไปยังโฮสต์เสมือนแรกที่กำหนดค่า
หากคุณมีโฮสต์เสมือนหลายรายการภายใต้โดเมนเดียวกันคุณสามารถตั้งค่าใบรับรองตัวแทนเดียวในที่อยู่ IP และมีโฮสต์เสมือนหลายรายการที่มีชื่อเซิร์ฟเวอร์ที่แตกต่างกัน อย่างไรก็ตามหากชื่อเซิร์ฟเวอร์เหล่านั้นไม่ได้อยู่ภายใต้ชื่อโดเมนเดียวกันพวกเขาจะสร้างข้อผิดพลาดเซิร์ฟเวอร์ลูกค้า สิ่งนี้จะทำงานได้เนื่องจากใบรับรองไวด์การ์ดจะใช้ได้กับชื่อโฮสต์ทั้งหมดภายใต้ชื่อโดเมนนั้น คุณจะต้องมีที่อยู่ IP อื่นหากชื่อโดเมนแตกต่างจากใบรับรองแรกที่กำหนดไว้สำหรับที่อยู่ IP นั้นจะเป็นที่อยู่ที่แสดงสำหรับการเชื่อมต่อไคลเอนต์
สามารถเพิ่มลงในใบรับรอง SSL เดียวได้หนึ่งรายการเป็น SAN (ชื่อสำรองของหัวเรื่อง) ในความสามารถของฉันฉันต้องขอใบรับรอง sll ขององค์กร ฉันใช้ globalsign
ที่จริงแล้วด้วยซอฟต์แวร์ที่ทันสมัยคุณสามารถให้บริการไซต์ HTTPS หลายแห่งผ่านที่อยู่ IP เดียวโดยใช้คุณสมบัติใหม่ที่เรียกว่า 'SNI - บ่งชี้ชื่อเซิร์ฟเวอร์'
http://en.wikipedia.org/wiki/Server_Name_Indication
http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
ฉันยังไม่ได้ใช้สิ่งนี้ด้วยตนเอง แต่ฟังดูดีสำหรับไซต์ภายในและอินทราเน็ต เบราว์เซอร์ที่ทันสมัยส่วนใหญ่รองรับ SNI IE6 ไม่รองรับ SNI แต่ IE7 ไม่รองรับ
(การแก้ไข: 20100426 - ไม่รองรับ SNI บน Windows XP เลย Windows Vista ขึ้นไปรองรับ SNI โปรดดู "ส่วน 2.2.3" ที่http://msdn.microsoft.com/en-us/library/dd208005% 28v = PROT.13% 29.aspx # id8 )
ฉันกำลังทำงานกับปัญหาเดียวกัน จากการทดสอบของฉัน IE7 และใหม่กว่า (เฉพาะใน Win7 & Vista) / Chrome / Firefox / Safari / Opera รองรับ "Server Name Indication" ในความเป็นจริงถ้าเบราว์เซอร์ใช้ Tsl 1.0 มันรองรับ "Server Name Indication"
ใบรับรอง UC เป็นหนทางไปอย่างแน่นอน: http://www.sslshopper.com/unified-communications-uc-ssl-certificates.html
หากคุณจะพยายามเพิ่มสองใบรับรองใน IP เดียวกันจะมีเพียงใบรับรองการอ่านแรกเท่านั้นที่จะใช้ทุกที่ หนึ่ง IP - หนึ่งใบรับรอง SSL
หากคุณต้องการได้รับใบรับรอง SSL เพิ่มเติมจาก IP เดียวกันให้ลองรับหลายโดเมน (เรียกว่า UCC - ลองดูที่ @ godaddy ) หรือใบรับรองตัวแทน (แพงกว่า)