ใครช่วยอธิบายความแตกต่างระหว่างใบรับรองเหล่านี้ให้ฉันได้อย่างง่ายดาย? ฉันอ่านบทความบางฉบับ แต่ดูเหมือนว่าพวกเขาทำงานเดียวกันนั่นคือการเข้ารหัสหลายโดเมนด้วยใบรับรองเดียว
ใครช่วยอธิบายความแตกต่างระหว่างใบรับรองเหล่านี้ให้ฉันได้อย่างง่ายดาย? ฉันอ่านบทความบางฉบับ แต่ดูเหมือนว่าพวกเขาทำงานเดียวกันนั่นคือการเข้ารหัสหลายโดเมนด้วยใบรับรองเดียว
คำตอบ:
SAN (Subject Alternative Name) เป็นส่วนหนึ่งของข้อมูลจำเพาะใบรับรอง X509โดยที่ใบรับรองมีฟิลด์ที่มีรายการชื่อทางเลือกที่ใช้ได้สำหรับหัวเรื่อง (นอกเหนือจาก Common Common / CN เดียว) ฟิลด์นี้และชื่อไวด์การ์ดเป็นหลักสองวิธีในการใช้หนึ่งใบรับรองสำหรับหลายชื่อ
SNI (บ่งชี้ชื่อเซิร์ฟเวอร์) เป็นส่วนขยายโปรโตคอล TLSที่เป็นประเภทของโปรโตคอล TLS ที่เทียบเท่ากับส่วนหัวโฮสต์ HTTP เมื่อไคลเอนต์ส่งสิ่งนี้จะช่วยให้เซิร์ฟเวอร์เลือกใบรับรองที่เหมาะสมที่จะนำเสนอให้กับลูกค้าโดยไม่มีข้อ จำกัด ในการใช้ที่อยู่ IP ที่แยกต่างหากในฝั่งเซิร์ฟเวอร์
โปรดทราบว่า SNI ไม่ใช่สิ่งที่สะท้อนอยู่ในใบรับรองและจริง ๆ แล้วประสบความสำเร็จตรงข้ามกับสิ่งที่คำถามถาม มันลดความซับซ้อนของการมีใบรับรองจำนวนมากไม่ใช้ใบรับรองเดียวสำหรับหลาย ๆ สิ่ง
ในอีกทางหนึ่งมันขึ้นอยู่กับสถานการณ์ที่เป็นเส้นทางที่ดีกว่า ตัวอย่างเช่นคำถามที่ถามมานั้นแทบจะไม่แน่นอนว่าคุณต้องการอะไรหากคุณต้องการใบรับรองสำหรับเอนทิตีที่แตกต่างกัน
SANย่อมาจากSubject Alternative Nameและเป็นคุณสมบัติใบรับรอง x509 และSNIเป็นคุณลักษณะที่ไคลเอ็นต์ SSL / TLS สามารถรองรับได้ซึ่งเป็นเอนทิตีที่แตกต่างกันโดยสิ้นเชิง
ใช้ใบรับรองกับSANคุณสามารถโฮสต์เว็บไซต์ที่เปิดใช้ HTTPS หลายที่อยู่ IP หนึ่งแม้กระทั่งในกรณีที่ลูกค้าไม่สนับสนุนSNI ในกรณีนี้คุณถือใบรับรองสำหรับทั้งหมดของเว็บไซต์ของคุณและใบรับรองดังกล่าวจะต้องมีทั้งหมดของชื่อเว็บไซต์ ( ServerName
หรือServerAlias
ES ในพิกัด Apache หรือserver_name
ใน Nginx) ขณะที่มันSANs นี่เป็นส่วนย่อยของวิธีการแบบดั้งเดิมซึ่งเป็นส่วนที่ขยาย "หนึ่งไซต์ที่เปิดใช้งาน HTTPS ในแต่ละที่อยู่ IP ที่แยกต่างหาก" ขณะนี้มีเพียง CDNs ขนาดใหญ่ติดกับSAN
การใช้SNIคุณสามารถโฮสต์ไซต์ที่เปิดใช้งาน HTTPS หลายแห่งบน IP เดียวคุณถือใบรับรอง x509 แยกต่างหากสำหรับแต่ละไซต์และไม่ได้กล่าวถึงชื่อไซต์อื่น ๆ ในคุณสมบัติSANของพวกเขาแต่ลูกค้า TLS (เช่นเบราว์เซอร์และไคลเอนต์คอนโซลเช่นwget
หรือcurl
) ต้องสนับสนุนSNI นี่เป็นวิธีการที่ทันสมัยเนื่องจากระบบปฏิบัติการล่าสุดที่ไม่รองรับSNI out-of-the-box นั้นคือ Windows XP ที่มี IE 6.x ถ้าฉันจำได้อย่างถูกต้อง ปัจจุบันคุณสามารถดูSANคุณสมบัติถ้าคุณซื้อสัญลักษณ์แทนใบรับรอง - ตัวอย่างเช่นใบรับรองดังกล่าว*.foobar.com
จะมีชื่อสามัญของ*.foobar.com
และSANfoobar.com
ของ
สิ่งนี้ผสมสองส่วนของกระบวนการออกใบรับรอง
SAN เป็นชื่อทางเลือกของหัวเรื่อง เป็นวิธีสร้างใบรับรองหนึ่งใบสำหรับหลายโดเมน คุณเพียงแค่เพิ่มโดเมนอื่น ๆ ที่คุณต้องการใบรับรองไปยังเขตข้อมูล SAN ในใบรับรอง เบราว์เซอร์จะยอมรับความถูกต้องในโดเมนเหล่านี้เช่นกัน
SNI คือการระบุชื่อเซิร์ฟเวอร์และเป็นส่วนหนึ่งของ SSL ช่วยให้คุณสามารถโฮสต์เว็บไซต์ SSL หลายแห่งใน IP เดียวเพราะชื่อเซิร์ฟเวอร์ที่ต้องการจะถูกส่งด้วยการจับมือ SSL และเซิร์ฟเวอร์สามารถเลือกใบรับรองที่ถูกต้องสำหรับคำตอบ
ต่อไปนี้เป็นคำตอบที่มนุษย์อ่านได้มากขึ้น
ดำเนินการ SNI ทางฝั่งไคลเอ็นต์และบอก TLS stack "ฉันต้องการคุยกับเซิร์ฟเวอร์ที่ชื่อ [Server X]" เซิร์ฟเวอร์เห็นสตริง [Server X] นี้และตอบกลับพร้อมใบรับรองที่เหมาะสม ตัวอย่างหนึ่งที่ใช้งานได้จริงคือเมื่อเซิร์ฟเวอร์เดียวต้องการรับส่งข้อมูลสำหรับหลายโดเมน นอกจากนี้ยังมีประโยชน์หากลูกค้าใช้ IP (เพื่อหลีกเลี่ยงความล่าช้าในการค้นหา DNS) แต่ใบรับรอง CN ไม่ได้กล่าวถึง IP
SAN เป็นรายการ "ที่รู้จักกันว่า" ในใบรับรอง เซิร์ฟเวอร์ในลักษณะนี้อาจใช้ใบรับรองเดียวสำหรับหลายชื่อ หนึ่งสามารถเพิ่มหลายโดเมนในใบรับรองเดียวกันและแม้กระทั่งรายการของ IP
อย่างที่คุณเห็นสิ่งต่าง ๆ ซ้อนทับกัน การเลือกระหว่างหนึ่งหรือทั้งสองขึ้นอยู่กับที่มีการควบคุม ไคลเอนต์บางคนอาจไม่รู้จักชื่อใน SAN และวิธีเดียวในการจัดการที่อยู่นั่นคือผ่านการให้ใบรับรองที่เหมาะสมตาม SNI มีสถานการณ์ที่เซิร์ฟเวอร์ให้ API สำหรับใบรับรองเดียวหรือไคลเอนต์ไม่ได้ส่ง SNI สำหรับกรณีเหล่านี้ SAN เป็นวิธีเดียวที่จะทำได้
บริษัท ของฉันใช้ทั้งสองอย่าง พวกเขาให้ความยืดหยุ่นและทำให้ความเข้ากันได้ย้อนหลังและไปข้างหน้าง่ายขึ้น