SSL ทำงานอย่างไร?


143

SSL ทำงานอย่างไร

ใบรับรองมีการติดตั้งบนไคลเอนต์ (หรือเบราว์เซอร์?) และเซิร์ฟเวอร์ (หรือเว็บเซิร์ฟเวอร์?) อยู่ที่ไหน?

กระบวนการความน่าเชื่อถือ / การเข้ารหัส / การรับรองความถูกต้องเริ่มต้นอย่างไรเมื่อคุณป้อน URL ลงในเบราว์เซอร์และรับหน้าจากเซิร์ฟเวอร์

โปรโตคอล HTTPS จำแนกใบรับรองอย่างไร เหตุใด HTTP จึงไม่สามารถทำงานกับใบรับรองเมื่อเป็นใบรับรองที่ความน่าเชื่อถือ / การเข้ารหัส / การรับรองความถูกต้องทั้งหมดทำงาน


24
ฉันคิดว่านี่เป็นคำถามที่สมเหตุสมผล - การทำความเข้าใจวิธีการทำงานของ SSL คือขั้นตอนที่ 1 การใช้อย่างถูกต้องคือขั้นตอนที่ 2 ถึงขั้นตอนที่ไม่มีที่สิ้นสุด
synthesizerpatel

4
ดูเพิ่มเติมที่: security.stackexchange.com/questions/20803/how-does-ssl-work
Luc


5
@StingyJack อย่าเป็นนาซีนโยบายที่นี่ ผู้คนต่างมาเพื่อขอความช่วยเหลือ อย่าปฏิเสธความช่วยเหลือทั้งหมดเพราะคุณพบว่าคำถามไม่ตรงกับกฎอย่างสมบูรณ์
Koray Tugay

1
@KorayTugay - ไม่มีใครปฏิเสธความช่วยเหลือ สิ่งนี้อยู่ใน Security หรือ Sysadmin ซึ่งเป็นเป้าหมายที่ดีกว่า แต่โดยทั่วไป OP จะได้ประโยชน์ในฟอรัมนี้โดยเพิ่มบริบทการเขียนโปรแกรมเล็กน้อยแทนที่จะโพสต์คำถาม IT ทั่วไป มีกี่คนที่ได้รับคำถามที่ปิดตัวลงเมื่อพวกเขาไม่ได้เชื่อมโยงกับปัญหาการเขียนโปรแกรมเฉพาะ อาจเป็นจำนวนมากเกินไปดังนั้น OP ของฉันที่จะผลักดันให้สมาคมนั้น
StingyJack

คำตอบ:


144

หมายเหตุ: ฉันเขียนคำตอบดั้งเดิมของฉันอย่างเร่งรีบ แต่หลังจากนั้นคำถามนี้ได้กลายเป็นคำถาม / คำตอบที่ได้รับความนิยมเป็นอย่างมากฉันจึงขยายคำตอบออกเล็กน้อยและทำให้แม่นยำยิ่งขึ้น

ความสามารถ TLS

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

TLS มีความสามารถหลายอย่าง:

  1. เข้ารหัสข้อมูลเลเยอร์แอปพลิเคชันของคุณ (ในกรณีของคุณโพรโทคอลเลเยอร์คือ HTTP)
  2. ตรวจสอบเซิร์ฟเวอร์กับลูกค้า
  3. ตรวจสอบลูกค้าไปยังเซิร์ฟเวอร์

# 1 และ # 2 เป็นเรื่องธรรมดามาก # 3 เป็นเรื่องธรรมดาน้อยกว่า ดูเหมือนว่าคุณจะให้ความสำคัญกับ # 2 ดังนั้นฉันจะอธิบายส่วนนั้น

การรับรอง

เซิร์ฟเวอร์รับรองความถูกต้องของตัวเองให้กับลูกค้าโดยใช้ใบรับรอง ใบรับรองคือหยดข้อมูล [1] ที่มีข้อมูลเกี่ยวกับเว็บไซต์:

  • ชื่อโดเมน
  • กุญแจสาธารณะ
  • บริษัท ที่เป็นเจ้าของมัน
  • เมื่อมันออก
  • เมื่อมันหมดอายุ
  • ใครเป็นคนออก
  • เป็นต้น

คุณสามารถบรรลุความลับได้ (# 1 ด้านบน) โดยใช้กุญแจสาธารณะที่รวมอยู่ในใบรับรองเพื่อเข้ารหัสข้อความที่สามารถถอดรหัสได้ด้วยรหัสส่วนตัวที่เกี่ยวข้องเท่านั้นซึ่งควรเก็บไว้อย่างปลอดภัยบนเซิร์ฟเวอร์นั้น [2] มาเรียกคู่คีย์นี้ว่า KP1 เพื่อเราจะได้ไม่สับสนในภายหลัง คุณสามารถยืนยันได้ว่าชื่อโดเมนในใบรับรองตรงกับเว็บไซต์ที่คุณเข้าชม (# 2 ด้านบน)

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

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

เจ้าหน้าที่ออกใบรับรอง

ใครเป็นผู้สร้าง KP2 ใครลงนามในใบรับรอง

การออกใบรับรองมากเกินไปสักหน่อยหน่วยงานออกใบรับรองจะสร้าง KP2 และพวกเขาขายบริการโดยใช้ไพรเวตคีย์เพื่อลงนามใบรับรองสำหรับองค์กรอื่น ๆ ตัวอย่างเช่นฉันสร้างใบรับรองและฉันจ่ายให้ บริษัท อย่าง Verisign เพื่อเซ็นชื่อด้วยรหัสส่วนตัวของพวกเขา [3] เนื่องจากไม่มีใครนอกจาก Verisign เข้าถึงรหัสส่วนตัวนี้เราจึงไม่มีใครสามารถปลอมลายเซ็นนี้ได้

และฉันจะรับกุญแจสาธารณะใน KP2 เป็นการส่วนตัวเพื่อยืนยันลายเซ็นนั้นได้อย่างไร

เราได้เห็นแล้วว่าใบรับรองสามารถถือกุญแจสาธารณะ - และนักวิทยาศาสตร์คอมพิวเตอร์รักการสอบถามซ้ำ - ทำไมไม่ลองใส่กุญแจสาธารณะ KP2 ลงในใบรับรองแล้วแจกมันด้วยวิธีนี้? ตอนแรกมันฟังดูเพี้ยนเล็กน้อย แต่ในความเป็นจริงแล้วมันทำงานอย่างไร ดำเนินการต่อด้วยตัวอย่าง Verisign Verisign สร้างใบรับรองที่มีข้อมูลเกี่ยวกับพวกเขาประเภทของสิ่งที่พวกเขาได้รับอนุญาตให้ลงชื่อ (ใบรับรองอื่น ๆ ) และกุญแจสาธารณะของพวกเขา

ตอนนี้ถ้าฉันมีสำเนาของใบรับรอง Verisign นั้นฉันสามารถใช้มันเพื่อตรวจสอบลายเซ็นบนใบรับรองเซิร์ฟเวอร์สำหรับเว็บไซต์ที่ฉันต้องการเยี่ยมชม ง่ายใช่มั้ย!

ไม่เร็วนัก ฉันได้รับใบรับรอง Verisign จากที่ไหนสักแห่ง จะเกิดอะไรขึ้นถ้ามีคนปลอมแปลงใบรับรอง Verisign และวางกุญแจสาธารณะของตนเองไว้ในนั้น จากนั้นพวกเขาสามารถปลอมลายเซ็นในใบรับรองของเซิร์ฟเวอร์และเรากลับมาที่จุดเริ่มต้นของเรา: การโจมตีคนในกลาง

โซ่ใบรับรอง

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

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

ฉันจะหยุดสักครู่ขณะที่คุณหยิบชิ้นส่วนของสมองจากหัวของคุณระเบิด ลงนามด้วยตนเอง ?!

ใช่ในตอนท้ายของห่วงโซ่ใบรับรอง (หรือที่รู้จักในชื่อ "รูท") จะมีใบรับรองที่ใช้เป็นคู่คีย์ของตนเองในการเซ็นชื่อ สิ่งนี้จะช่วยลดปัญหาการเรียกซ้ำไม่สิ้นสุด แต่ก็ไม่ได้แก้ไขปัญหาการตรวจสอบสิทธิ์ ใคร ๆ ก็สามารถสร้างใบรับรองที่ลงนามเองได้ซึ่งบอกอะไรก็ได้เหมือนฉันสามารถสร้างประกาศนียบัตรปลอมของพรินซ์ตันที่บอกว่าฉันเรียนวิชาเอกการเมืองการเมืองฟิสิกส์เชิงทฤษฎีและสมัครเตะก้นแล้วเซ็นชื่อของฉันเองที่ด้านล่าง

วิธีแก้ปัญหา [ค่อนข้างไม่น่าตื่นเต้น] สำหรับปัญหานี้คือการเลือกชุดใบรับรองที่ลงนามด้วยตนเองบางชุดที่คุณเชื่อถืออย่างชัดแจ้ง ตัวอย่างเช่นฉันอาจพูดว่า "ฉันเชื่อถือใบรับรอง Verisign ที่ลงชื่อด้วยตนเอง"

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

ความไว้วางใจที่ตกลงกัน

รับรองความถูกต้องใน TLS ใช้ระบบของความไว้วางใจพระราชทาน ถ้าฉันต้องการจ้างช่างซ่อมรถยนต์ฉันอาจไม่เชื่อถือช่างสุ่ม ๆ ที่ฉันพบ แต่บางทีเพื่อนของฉันอาจรับรองช่างบางคน เนื่องจากฉันเชื่อใจเพื่อนของฉันดังนั้นฉันจึงสามารถวางใจช่างได้

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

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

บางครั้ง CA ทั้งหมดถูกบุกรุก ตัวอย่างเช่นหากคุณต้องการเจาะระบบ Verisign และขโมยรหัสการลงชื่อรูทของพวกเขาคุณสามารถปลอมแปลงใบรับรองใด ๆในโลก โปรดสังเกตว่าสิ่งนี้ไม่เพียงส่งผลกระทบต่อลูกค้า Verisign: แม้ว่าใบรับรองของฉันจะถูกลงชื่อโดย Thawte (คู่แข่งของ Verisign) แต่นั่นก็ไม่สำคัญ ใบรับรองของฉันยังสามารถปลอมแปลงได้โดยใช้คีย์การลงนามที่ถูกบุกรุกจาก Verisign

นี่ไม่ใช่แค่ทางทฤษฎี มันเกิดขึ้นในป่า DigiNotar ถูกแฮ็คที่มีชื่อเสียงและต่อมาก็ล้มละลาย โคโมโดก็ถูกแฮ็กด้วย แต่พวกเขายังคงทำธุรกิจอย่างลึกลับมาจนถึงทุกวันนี้

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

เปลี่ยนบางคนได้รับการแนะนำรวมทั้งConvergence , TACKและDANE

เชิงอรรถ

[1] ข้อมูลใบรับรอง TLS มีรูปแบบที่เป็นไปตามมาตรฐาน X.509 X.509 ใช้ASN.1 ("Abstract Syntax Notation # 1") ซึ่งหมายความว่าไม่ใช่รูปแบบข้อมูลไบนารี ดังนั้น X.509 ต้องเข้ารหัสเป็นรูปแบบไบนารี DER และ PEMเป็นรหัสที่ใช้กันทั่วไปสองแบบที่ฉันรู้จัก

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

[3] สันนิษฐานว่าจริง ๆ แล้ว CA ตรวจสอบว่าคุณคือใครก่อนที่จะเซ็นใบรับรองของคุณ หากพวกเขาไม่ทำเช่นนั้นฉันก็สามารถสร้างใบรับรองสำหรับ google.com และขอให้ CA ลงนามได้ ด้วยการรับรองนั้นฉันสามารถเชื่อมต่อกับ "ปลอดภัย" กับคนที่อยู่ตรงกลางกับ google.com ดังนั้นขั้นตอนการตรวจสอบจึงเป็นปัจจัยที่สำคัญมากในการดำเนินงานของ CA น่าเสียดายที่มันยังไม่ชัดเจนว่ากระบวนการตรวจสอบนี้เข้มงวดมากเพียงใดที่ CA หลายร้อยแห่งทั่วโลก

[4] ดูของ Mozilla รายการ CAs


กุญแจส่วนตัวคืออะไร?
Koray Tugay

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

ขอบคุณ @amdouhalramadan ฉันได้แก้ไขพูดถึงแล้ว
Mark E. Haase

2
@mamdouhalramadan "กุญแจสาธารณะคือ ... ส่งไปยังเว็บไซต์เพื่อถอดรหัสข้อมูล" พับลิกคีย์สามารถใช้เพื่อถอดรหัสข้อมูลได้อย่างไร?
ตุ๊กตา

@ateddy คุณถูกต้อง มันไม่สามารถ กุญแจสาธารณะจะใช้สำหรับการตรวจสอบสิทธิ์เท่านั้น การอ้างสิทธิ์ที่นี่ว่าคู่คีย์ใช้สำหรับการเข้ารหัสและถอดรหัสไม่ถูกต้อง มีการใช้คีย์เซสชันที่เจรจาอย่างปลอดภัย
มาร์ควิสแห่ง Lorne

53

HTTPS เป็นการรวมกันของHTTPและSSL (Secure Socket Layer)เพื่อให้การสื่อสารที่เข้ารหัสระหว่างไคลเอนต์ (เบราว์เซอร์) และเว็บเซิร์ฟเวอร์ (แอปพลิเคชันโฮสต์อยู่ที่นี่)

ทำไมถึงจำเป็น?

HTTPS เข้ารหัสข้อมูลที่ส่งจากเบราว์เซอร์ไปยังเซิร์ฟเวอร์ผ่านเครือข่าย ดังนั้นจึงไม่มีใครสามารถดมกลิ่นข้อมูลในระหว่างการส่ง

วิธีสร้างการเชื่อมต่อ HTTPS ระหว่างเบราว์เซอร์และเว็บเซิร์ฟเวอร์

  1. เบราว์เซอร์พยายามที่จะเชื่อมต่อกับhttps://payment.com
  2. เซิร์ฟเวอร์ payment.com ส่งใบรับรองไปยังเบราว์เซอร์ ใบรับรองนี้มีรหัสสาธารณะของเซิร์ฟเวอร์ payment.com และหลักฐานบางอย่างที่ว่ารหัสสาธารณะนี้เป็นของ payment.com จริง ๆ
  3. เบราว์เซอร์ตรวจสอบใบรับรองเพื่อยืนยันว่ามีรหัสสาธารณะที่ถูกต้องสำหรับ payment.com
  4. เบราว์เซอร์เลือกคีย์สมมาตรใหม่แบบสุ่ม K เพื่อใช้สำหรับการเชื่อมต่อกับเซิร์ฟเวอร์ payment.com มันเข้ารหัส K ภายใต้พับลิกคีย์สาธารณะ
  5. payment.com ถอดรหัส K โดยใช้รหัสส่วนตัว ตอนนี้ทั้งเบราว์เซอร์และเซิร์ฟเวอร์การชำระเงินรู้ว่า K แต่ไม่มีใครทำ
  6. เบราว์เซอร์ทุกครั้งที่ต้องการส่งบางสิ่งไปที่ payment.com มันจะเข้ารหัสภายใต้ K; เซิร์ฟเวอร์ payment.com ถอดรหัสเมื่อได้รับ เมื่อใดก็ตามที่เซิร์ฟเวอร์ payment.com ต้องการส่งบางสิ่งไปยังเบราว์เซอร์ของคุณจะเข้ารหัสภายใต้ K

โฟลว์นี้สามารถแสดงโดยแผนภาพต่อไปนี้: ป้อนคำอธิบายรูปภาพที่นี่


1
ส่วนเกี่ยวกับการเข้ารหัสและการส่งเซสชั่นคีย์และถอดรหัสที่เซิร์ฟเวอร์เสร็จสมบูรณ์และขยะมากที่สุด เซสชั่นคีย์ไม่เคยส่งเลย: มันถูกสร้างขึ้นผ่านอัลกอริทึม negoatiaon คีย์ที่ปลอดภัย โปรดตรวจสอบข้อเท็จจริงของคุณก่อนโพสต์เรื่องไร้สาระเช่นนี้ RFC 2246.
มาร์ควิสแห่งลอร์นส์

ทำไมเบราว์เซอร์ไม่ใช้กุญแจสาธารณะของเซิร์ฟเวอร์เพื่อเข้ารหัสข้อมูลเมื่อโพสต์ไปยังเซิร์ฟเวอร์แทนที่จะสร้างคีย์สมมาตรใหม่แบบสุ่ม K ในขั้นตอนที่ 4
KevinBui

1
@KevinBui เนื่องจากการส่งการตอบสนองจากเซิร์ฟเวอร์นั้นต้องการให้ไคลเอนต์มีคู่คีย์และเนื่องจากการเข้ารหัสแบบไม่สมมาตรช้ามาก
มาร์ควิสแห่ง Lorne

3

ฉันได้เขียนโพสต์บล็อกเล็ก ๆ ที่กล่าวถึงกระบวนการสั้น ๆ โปรดดู

SSL Handshake

ตัวอย่างขนาดเล็กจากที่เดียวกันเป็นดังนี้:

"ไคลเอนต์ทำการร้องขอไปยังเซิร์ฟเวอร์ผ่าน HTTPS เซิร์ฟเวอร์ส่งสำเนาใบรับรอง SSL + รหัสสาธารณะของตนหลังจากตรวจสอบตัวตนของเซิร์ฟเวอร์ด้วยร้านค้า CA ที่เชื่อถือได้ในท้องถิ่นแล้วลูกค้าจะสร้างคีย์เซสชันลับเข้ารหัสโดยใช้สาธารณะของเซิร์ฟเวอร์ คีย์และส่งเซิร์ฟเวอร์จะถอดรหัสเซสชั่นลับโดยใช้คีย์ส่วนตัวและส่งการตอบรับไปยังไคลเอนต์สร้างแชนเนลที่ปลอดภัยแล้ว "


"หลังจากตรวจสอบตัวตนของเซิร์ฟเวอร์ด้วยร้าน CA ที่เชื่อถือได้ในท้องถิ่น" - นี่ไม่เป็นความจริงอย่างเด็ดขาด ฉันสามารถใช้ใบรับรองลงนามด้วยตนเองและ HTTPS จะทำงาน - ฉันจะได้รับการเชื่อมต่อ HTTPS ที่ปลอดภัยไปยังเซิร์ฟเวอร์ ใบรับรองที่เชื่อถือได้มาในเมื่อฉันต้องการให้แน่ใจว่าฉันกำลังพูดคุยกับเซิร์ฟเวอร์ที่ถูกต้องเท่านั้น
ตุ๊กตา

ส่วนเกี่ยวกับการเข้ารหัสและการส่งเซสชั่นคีย์และถอดรหัสที่เซิร์ฟเวอร์เสร็จสมบูรณ์และขยะมากที่สุด เซสชั่นคีย์ไม่เคยส่งเลย: มันถูกสร้างขึ้นผ่านอัลกอริทึม negoatiaon คีย์ที่ปลอดภัย โปรดตรวจสอบข้อเท็จจริงของคุณก่อนโพสต์เรื่องไร้สาระเช่นนี้ RFC 2246.
มาร์ควิสแห่งลอร์นส์

@ เท็ดดี้นั่นไม่ถูกต้อง การตรวจสอบความน่าเชื่อถือของใบรับรองนั้นเป็นส่วนหนึ่งของ SSL สามารถข้ามได้ แต่โดยปกติแล้วจะมีผลบังคับใช้: ใบรับรองที่ลงนามเองไม่ทำงานหากไม่มีมาตรการพิเศษอย่างใดอย่างหนึ่ง
มาร์ควิสแห่ง Lorne

2

Mehaase ได้อธิบายรายละเอียดไว้แล้ว ฉันจะเพิ่ม 2 เซนต์ของฉันลงในซีรี่ส์นี้ ฉันมีบล็อกโพสต์จำนวนมากหมุนรอบจับมือ SSL และใบรับรอง ในขณะที่สิ่งนี้ส่วนใหญ่หมุนรอบ IIS เว็บเซิร์ฟเวอร์โพสต์ยังคงเกี่ยวข้องกับการจับมือ SSL / TLS โดยทั่วไป นี่คือบางส่วนสำหรับการอ้างอิงของคุณ:

อย่าถือว่าCERTIFICATES & SSLเป็นหนึ่งหัวข้อ ปฏิบัติต่อพวกเขาเป็น 2 หัวข้อที่แตกต่างกันแล้วลองดูว่าใครทำงานร่วมกัน สิ่งนี้จะช่วยคุณตอบคำถาม

สร้างความไว้วางใจระหว่างฝ่ายสื่อสารผ่าน Certificate Store

การสื่อสาร SSL / TLS ทำงานบนพื้นฐานของความเชื่อถือเท่านั้น คอมพิวเตอร์ทุกเครื่อง (ไคลเอนต์ / เซิร์ฟเวอร์) บนอินเทอร์เน็ตมีรายการ Root CA's และ Intermediate CA's ที่เก็บรักษาไว้ เหล่านี้มีการปรับปรุงเป็นระยะ ระหว่างการจับมือ SSL สิ่งนี้ถูกใช้เป็นข้อมูลอ้างอิงเพื่อสร้างความไว้วางใจ สำหรับ exampe ระหว่าง SSL handshake เมื่อไคลเอ็นต์จัดเตรียมใบรับรองไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์จะพยายามตรวจสอบว่า CA ที่ออกใบรับรองนั้นมีอยู่ในรายการของ CA หรือไม่ เมื่อไม่สามารถทำสิ่งนี้ได้ก็จะประกาศว่าไม่สามารถทำการตรวจสอบห่วงโซ่ใบรับรองได้ (นี่เป็นส่วนหนึ่งของคำตอบนอกจากนี้ยังดูที่AIAสำหรับสิ่งนี้) ลูกค้ายังทำการตรวจสอบที่คล้ายกันสำหรับใบรับรองเซิร์ฟเวอร์ที่ได้รับในเซิร์ฟเวอร์ Hello บน Windows คุณสามารถดูที่เก็บใบรับรองสำหรับไคลเอ็นต์และเซิร์ฟเวอร์ผ่าน PowerShell ดำเนินการด้านล่างจากคอนโซล PowerShell

PS Cert:> ls ที่ตั้ง: ชื่อผู้ใช้ปัจจุบัน: {TrustedPublisher, ClientAuthIssuer, Root, UserDS ... }

สถานที่: LocalMachine StoreNames: {TrustedPublisher, ClientAuthIssuer, เดสก์ท็อประยะไกล, รูท ... }

เบราว์เซอร์เช่น Firefox และ Opera ไม่ต้องพึ่งพาระบบปฏิบัติการพื้นฐานสำหรับการจัดการใบรับรอง พวกเขายังคงเก็บใบรับรองของตัวเองแยกต่างหาก

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

ในที่สุดสำหรับคำถามนี้

โปรโตคอล HTTPS จำแนกใบรับรองอย่างไร เหตุใด HTTP จึงไม่สามารถทำงานกับใบรับรองเมื่อเป็นใบรับรองที่ความน่าเชื่อถือ / การเข้ารหัส / การรับรองความถูกต้องทั้งหมดทำงาน

ใบรับรองเป็นเพียงไฟล์ที่มีการกำหนดรูปแบบตามมาตรฐานX.509 เป็นเอกสารอิเล็กทรอนิกส์ที่พิสูจน์ตัวตนของฝ่ายสื่อสาร HTTPS = HTTP + SSLเป็นโปรโตคอลที่กำหนดแนวทางว่าบุคคลทั้งสองควรสื่อสารกันอย่างไร

ข้อมูลมากกว่านี้

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

หากทำกิจกรรมข้างต้นแล้วคุณจะมีความเข้าใจที่ถูกต้องเกี่ยวกับใบรับรองและ SSL

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