ใบรับรอง SSL ได้รับการยืนยันอย่างไร


219

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

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


พบวิดีโอนี้มีประโยชน์มากในการทำความเข้าใจกับการไหลของyoutube.com/watch?v=T4Df5_cojAs
กฤษณะ

คำตอบ:


308

นี่คือคำอธิบายที่ง่ายมาก:

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

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

  3. ใบรับรองประกอบด้วยชื่อโดเมนและ / หรือที่อยู่ ip ของเว็บเซิร์ฟเวอร์ เว็บเบราว์เซอร์ของคุณยืนยันกับผู้ออกใบรับรองว่าที่อยู่ที่ระบุไว้ในใบรับรองเป็นที่อยู่ที่มีการเชื่อมต่อแบบเปิด

  4. เว็บเบราว์เซอร์ของคุณสร้างคีย์ symmetric ที่ใช้ร่วมกันซึ่งจะใช้ในการเข้ารหัสทราฟฟิก HTTP ในการเชื่อมต่อนี้ สิ่งนี้มีประสิทธิภาพมากกว่าการใช้การเข้ารหัสคีย์สาธารณะ / ส่วนตัวสำหรับทุกสิ่ง เบราว์เซอร์ของคุณเข้ารหัสคีย์ symmetric ด้วยพับลิกคีย์ของเว็บเซิร์ฟเวอร์จากนั้นส่งคืนดังนั้นจึงมั่นใจได้ว่าเฉพาะเว็บเซิร์ฟเวอร์เท่านั้นที่สามารถถอดรหัสได้เนื่องจากเว็บเซิร์ฟเวอร์เท่านั้นที่มีคีย์ส่วนตัว

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


4
ประมาณขั้นตอนที่ 1.5 เซิร์ฟเวอร์จะ "ลงชื่อ" บางสิ่งด้วยคีย์ส่วนตัวที่เชื่อมโยงกับใบรับรอง สิ่งนี้จะรวมเข้ากับการตรวจสอบชื่อ / IP เพื่อให้มั่นใจว่าเฉพาะเว็บไซต์ที่เป็นเจ้าของใบรับรองเท่านั้น
Darron

68
หากต้องการดูตัวอย่างการทำงานที่สมบูรณ์ของกระบวนการนี้โดยใช้ Firefox ที่เชื่อมต่อกับamazon.comโปรดดูmoserware.com/2009/06/first-few-milliseconds-of-https.html # # # # # # # # # # # # # ของคุณ
เจฟฟ์โมเซอร์

9
ฉันไม่ทราบว่าเบราว์เซอร์ของฉันติดตั้งมาพร้อมกับกุญแจสาธารณะของผู้ออกใบรับรองหลัก ๆ ทั้งหมด ตอนนี้ฉันรู้ว่าใบรับรอง SSL ของฉันได้รับการตรวจสอบโดยไม่มีความเสี่ยงต่อ MITM :) ขอบคุณ!
OneChillDude

5
เซิร์ฟเวอร์ต้องขอใบรับรองจาก CAuthority ดังนั้นจึงส่งคำขอไป CA จะแน่ใจได้อย่างไรว่าเซิร์ฟเวอร์นั้นถูกต้อง
voipp

4
@voipp: คำถามยอดเยี่ยม! ในอดีตมีวิธีการบางอย่างเช่น "ส่งอีเมลจากwebmaster@<domain-being-verified>หรือ" วางไฟล์นี้ในโดเมนของคุณเพื่อพิสูจน์ว่าคุณเป็นเจ้าของ "อย่างไรก็ตามมีปัญหากับผู้ที่ได้รับ CA เพื่อออกใบรับรองสำหรับโดเมนที่พวกเขาไม่ได้ เป็นเจ้าของ - ใครบางคนที่มีชื่อเสียงจัดการเพื่อรับ CA ที่ร่มรื่นเพื่อออกใบรับรองให้กับ gmail.com!
Eli Courtwright

58

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

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

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


1
แท้จริงแล้วการแจกจ่ายใบรับรองของคุณอย่างปลอดภัยเป็นวิธีหนึ่งในการดูแลแมว แต่วิธีที่ง่ายกว่ามากคือไปที่ CA ที่เรียกว่า "open" CACert.org เป็นรายการโปรดของฉัน ตราบใดที่คุณเชื่อถือขั้นตอนที่พวกเขาดำเนินการเพื่อปกป้องการออกใบรับรองของพวกเขาจากนั้นการนำเข้าใบรับรองหลักของพวกเขาจะปลอดภัย
nsayer

6
ฉันชอบความคิดเห็นนี้ - แต่น่าเสียดายที่ไฮไลท์จุดอ่อนสำคัญกับ CAs สมมติว่าคุณนำเข้าใบรับรอง CA จาก Bob Smith - ดี Bob Smith สามารถลงนามใบรับรองสำหรับโดเมนใด ๆ (รวมถึง google.com และ chase.com) นี่คือเหตุผลว่าทำไม GoDaddy / Verisign จ่ายเงินจำนวนมากเพื่อรวมไว้ในระบบปฏิบัติการ - พวกเขาถูกตรวจสอบโดยชุดรักษาความปลอดภัยเพื่อให้แน่ใจว่าพวกเขามีการตรวจสอบในสถานที่เพื่อให้แน่ใจว่าพวกเขาไม่ได้ลงนามรับรองสำหรับบุคคลที่เป็นอันตราย ฉันคิดว่าคุณควรจะพูดว่า "CA นี้สามารถเซ็น certs สำหรับ mysite.com เท่านั้น"
Natalie Adams

ไม่ใช่ใบรับรองที่ลงชื่อด้วยตนเองที่ปลอดภัยยิ่งขึ้นเนื่องจากสามารถออกใบรับรอง CA เพื่อลงชื่อในบางสิ่งที่ไม่ควรมี หากคุณสามารถแจกจ่าย CA certs อย่างปลอดภัยไปยังจุดสิ้นสุดให้ไปที่ certs ที่ลงชื่อด้วยตนเองเสมอ
javaPhobic

มี CA ใดบ้างที่ให้บริการฟรีและผ่านการตรวจสอบในเบราว์เซอร์หลัก ๆ ฉันกำลังมองหาใบรับรองขั้นพื้นฐานเพียงเพื่อยืนยันว่าฉันเป็นเจ้าของอีเมลและชื่อโดเมน สิ่งที่ฉันพบไม่ได้อยู่ในเบราว์เซอร์หลัก ๆ
Alex Kwitny

@NathanAdams ตามทฤษฎีแล้ว CA ขนาดใหญ่ควรจะขอสัตว์แพทย์เพื่อป้องกันไม่ให้ออกใบรับรองปลอมในขณะที่คุณอธิบาย ... แต่อ่านเรื่องนี้: Stripe.ian.sh
nsayer

38

คุณพูดว่า

เบราว์เซอร์จะรับข้อมูลผู้ออกใบรับรองจากใบรับรองนั้นจากนั้นใช้เพื่อติดต่อผู้ออกใบรับรองและเปรียบเทียบใบรับรองเพื่อความถูกต้อง

ลูกค้าไม่ต้องตรวจสอบกับผู้ออกเพราะมีสองสิ่ง:

  1. เบราว์เซอร์ทั้งหมดมีรายการกุญแจสาธารณะ CA หลัก ๆ ที่ติดตั้งล่วงหน้า
  2. ใบรับรองถูกเซ็นชื่อและลายเซ็นนั้นเองนั้นเป็นหลักฐานที่เพียงพอว่าใบรับรองนั้นใช้ได้เพราะลูกค้าสามารถตรวจสอบด้วยตนเองและโดยไม่ต้องติดต่อกับเซิร์ฟเวอร์ของผู้ออกใบรับรองนั้นเป็นใบรับรองที่แท้จริง นั่นคือความงามของการเข้ารหัสแบบอสมมาตร

โปรดสังเกตว่า 2. ไม่สามารถทำได้หากไม่มี 1

นี่คือคำอธิบายที่ดีขึ้นในแผนภาพขนาดใหญ่นี้ที่ฉันทำเมื่อไม่นานมานี้

(ข้ามไปที่ "ลายเซ็นคืออะไร" ที่ด้านล่าง)

หยด


9
นี่ควรเป็นคำตอบที่ยอมรับได้ คำตอบของ @Eli Courtwright เป็นวิธีการย่อ imho เพื่อทำความเข้าใจว่าใบรับรองทำงานอย่างไร
เฟลิกซ์ Crazzolara

การอ่านครั้งนี้อาจไม่เพียงพอ แต่ถ้าคุณคุ้นเคยกับบิตและส่วนของ SSL อยู่แล้วสิ่งนี้จะนำทุกอย่างมารวมกัน งานที่ดี!
Cameron Gagnon

ภาพที่น่าอัศจรรย์ ในที่สุดสิ่งที่อธิบายคำถามของฉัน ทุกที่ที่ฉันไปในเชิงลึกเพียงแค่พูดว่า "เบราว์เซอร์ตรวจสอบใบรับรองถูกต้อง" แต่มันทำอย่างไร? นี่ให้คำตอบ
ori6151

8

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

คุณสามารถตรวจสอบและ / หรือแก้ไขรายการหน่วยงานที่เชื่อถือได้ บ่อยครั้งที่คุณทำเช่นนี้เพื่อเพิ่มใบรับรองสำหรับหน่วยงานท้องถิ่นที่คุณรู้ว่าคุณไว้วางใจ - เช่น บริษัท ที่คุณทำงานหรือโรงเรียนที่คุณเข้าเรียนหรือไม่

รายการก่อนเพาะสามารถแตกต่างกันไปขึ้นอยู่กับลูกค้าที่คุณใช้ ผู้ค้าใบรับรอง SSL รายใหญ่รับรองว่าใบรับรองหลักของพวกเขาอยู่ในเบราว์เซอร์หลัก ($$$) ทั้งหมด

การโจมตีแบบ Monkey-in-the-middle นั้น "เป็นไปไม่ได้" เว้นแต่ผู้โจมตีจะมีรหัสส่วนตัวของใบรับรองหลักที่เชื่อถือได้ เนื่องจากใบรับรองที่เกี่ยวข้องมีการใช้งานอย่างกว้างขวางการเปิดเผยคีย์ส่วนตัวดังกล่าวจะมีผลกระทบร้ายแรงต่อความปลอดภัยของอีคอมเมิร์ซโดยทั่วไป ด้วยเหตุนี้กุญแจส่วนตัวเหล่านั้นจึงได้รับการปกป้องอย่างใกล้ชิด


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