ใบรับรอง SAN และ SNI SSL แตกต่างกันอย่างไร


21

ใครช่วยอธิบายความแตกต่างระหว่างใบรับรองเหล่านี้ให้ฉันได้อย่างง่ายดาย? ฉันอ่านบทความบางฉบับ แต่ดูเหมือนว่าพวกเขาทำงานเดียวกันนั่นคือการเข้ารหัสหลายโดเมนด้วยใบรับรองเดียว


11
ก่อนอื่นไม่มีใบรับรอง SSL "SNI"
Michael Hampton

คำตอบ:


36

SAN (Subject Alternative Name) เป็นส่วนหนึ่งของข้อมูลจำเพาะใบรับรอง X509โดยที่ใบรับรองมีฟิลด์ที่มีรายการชื่อทางเลือกที่ใช้ได้สำหรับหัวเรื่อง (นอกเหนือจาก Common Common / CN เดียว) ฟิลด์นี้และชื่อไวด์การ์ดเป็นหลักสองวิธีในการใช้หนึ่งใบรับรองสำหรับหลายชื่อ

SNI (บ่งชี้ชื่อเซิร์ฟเวอร์) เป็นส่วนขยายโปรโตคอล TLSที่เป็นประเภทของโปรโตคอล TLS ที่เทียบเท่ากับส่วนหัวโฮสต์ HTTP เมื่อไคลเอนต์ส่งสิ่งนี้จะช่วยให้เซิร์ฟเวอร์เลือกใบรับรองที่เหมาะสมที่จะนำเสนอให้กับลูกค้าโดยไม่มีข้อ จำกัด ในการใช้ที่อยู่ IP ที่แยกต่างหากในฝั่งเซิร์ฟเวอร์

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

ในอีกทางหนึ่งมันขึ้นอยู่กับสถานการณ์ที่เป็นเส้นทางที่ดีกว่า ตัวอย่างเช่นคำถามที่ถามมานั้นแทบจะไม่แน่นอนว่าคุณต้องการอะไรหากคุณต้องการใบรับรองสำหรับเอนทิตีที่แตกต่างกัน


2
เป็นที่น่าสังเกตว่า CN นั้นเลิกใช้มานานแล้วหากชื่ออยู่ใน CN แต่ไม่ใช่ SAN (หรือถ้าใบรับรองไม่มีช่อง SAN) ลูกค้าจำนวนมากจะโกรธคุณ
coderanger

1
@coderanger หากมีฟิลด์ SAN ฟิลด์ CN จะถูกละเว้นโดยไคลเอนต์ส่วนใหญ่ หากไม่มีเขตข้อมูล SAN เขตข้อมูล CN จะทำงานกับลูกค้าส่วนใหญ่ (และหากพวกเขาโกรธฉันฉันจะไม่แสดง)
kubanczyk

1
พวกเขากำลังตัดสินคุณอย่างเงียบ ๆ
womble

SNI นั้นคล้ายกับโฮสต์เสมือนที่เซิร์ฟเวอร์ที่มีที่อยู่ IP หนึ่งบอกว่ามีโฮสต์หลายโฮสต์ที่กำหนดไว้ในการกำหนดค่า HTTP (มัลติเพล็กซ์บางประเภท: ใช้ IP หนึ่งรายการสำหรับหลายใบรับรองแทนใบรับรองแต่ละรายการด้วย IP ที่แตกต่างกันซึ่ง IPv4 เป็นทรัพยากรที่หายากในสมัยนี้)
Fernando Gabrieli

1
@FernandoGabrieli ใช่มันเปิดใช้งานการตั้งค่าตามชื่อประเภทเดียวกันในระดับ TLS
Håkan Lindqvist

14

SANย่อมาจากSubject Alternative Nameและเป็นคุณสมบัติใบรับรอง x509 และSNIเป็นคุณลักษณะที่ไคลเอ็นต์ SSL / TLS สามารถรองรับได้ซึ่งเป็นเอนทิตีที่แตกต่างกันโดยสิ้นเชิง

ใช้ใบรับรองกับSANคุณสามารถโฮสต์เว็บไซต์ที่เปิดใช้ HTTPS หลายที่อยู่ IP หนึ่งแม้กระทั่งในกรณีที่ลูกค้าไม่สนับสนุนSNI ในกรณีนี้คุณถือใบรับรองสำหรับทั้งหมดของเว็บไซต์ของคุณและใบรับรองดังกล่าวจะต้องมีทั้งหมดของชื่อเว็บไซต์ ( ServerNameหรือServerAliasES ในพิกัด 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ของ


1
ในทางเทคนิคแล้วฉันไม่เชื่อว่าไคลเอนต์SSLสามารถรองรับ SNI ได้ (จากที่ฉันรู้ว่าเป็นส่วนขยาย TLS ที่ไม่เคยปรากฏใน SSL)
Håkan Lindqvist

3
ทั้ง SAN และ SNI ต้องการการสนับสนุนลูกค้า อย่างไรก็ตามเนื่องจาก SAN ได้รับรอบนานกว่านั้นจึงได้รับการสนับสนุนอย่างกว้างขวางมากขึ้น
kasperd

4

สิ่งนี้ผสมสองส่วนของกระบวนการออกใบรับรอง

SAN เป็นชื่อทางเลือกของหัวเรื่อง เป็นวิธีสร้างใบรับรองหนึ่งใบสำหรับหลายโดเมน คุณเพียงแค่เพิ่มโดเมนอื่น ๆ ที่คุณต้องการใบรับรองไปยังเขตข้อมูล SAN ในใบรับรอง เบราว์เซอร์จะยอมรับความถูกต้องในโดเมนเหล่านี้เช่นกัน

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


0

ต่อไปนี้เป็นคำตอบที่มนุษย์อ่านได้มากขึ้น

ดำเนินการ SNI ทางฝั่งไคลเอ็นต์และบอก TLS stack "ฉันต้องการคุยกับเซิร์ฟเวอร์ที่ชื่อ [Server X]" เซิร์ฟเวอร์เห็นสตริง [Server X] นี้และตอบกลับพร้อมใบรับรองที่เหมาะสม ตัวอย่างหนึ่งที่ใช้งานได้จริงคือเมื่อเซิร์ฟเวอร์เดียวต้องการรับส่งข้อมูลสำหรับหลายโดเมน นอกจากนี้ยังมีประโยชน์หากลูกค้าใช้ IP (เพื่อหลีกเลี่ยงความล่าช้าในการค้นหา DNS) แต่ใบรับรอง CN ไม่ได้กล่าวถึง IP

SAN เป็นรายการ "ที่รู้จักกันว่า" ในใบรับรอง เซิร์ฟเวอร์ในลักษณะนี้อาจใช้ใบรับรองเดียวสำหรับหลายชื่อ หนึ่งสามารถเพิ่มหลายโดเมนในใบรับรองเดียวกันและแม้กระทั่งรายการของ IP

อย่างที่คุณเห็นสิ่งต่าง ๆ ซ้อนทับกัน การเลือกระหว่างหนึ่งหรือทั้งสองขึ้นอยู่กับที่มีการควบคุม ไคลเอนต์บางคนอาจไม่รู้จักชื่อใน SAN และวิธีเดียวในการจัดการที่อยู่นั่นคือผ่านการให้ใบรับรองที่เหมาะสมตาม SNI มีสถานการณ์ที่เซิร์ฟเวอร์ให้ API สำหรับใบรับรองเดียวหรือไคลเอนต์ไม่ได้ส่ง SNI สำหรับกรณีเหล่านี้ SAN เป็นวิธีเดียวที่จะทำได้

บริษัท ของฉันใช้ทั้งสองอย่าง พวกเขาให้ความยืดหยุ่นและทำให้ความเข้ากันได้ย้อนหลังและไปข้างหน้าง่ายขึ้น

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