เมื่อใดก็ตามที่ฉันพยายามที่จะเข้าใจอะไรเกี่ยวกับ SSL ฉันมักจะมีเวลาที่ยากลำบากในการติดตามสิ่งที่ "สำคัญ" และ "ใบรับรอง" อ้างถึง ฉันกลัวว่าหลายคนใช้มันไม่ถูกต้องหรือสลับกันได้ มีความแตกต่างมาตรฐานระหว่างคีย์และใบรับรองหรือไม่
เมื่อใดก็ตามที่ฉันพยายามที่จะเข้าใจอะไรเกี่ยวกับ SSL ฉันมักจะมีเวลาที่ยากลำบากในการติดตามสิ่งที่ "สำคัญ" และ "ใบรับรอง" อ้างถึง ฉันกลัวว่าหลายคนใช้มันไม่ถูกต้องหรือสลับกันได้ มีความแตกต่างมาตรฐานระหว่างคีย์และใบรับรองหรือไม่
คำตอบ:
ใบรับรองประกอบด้วยพับลิกคีย์
ใบรับรองนอกเหนือจากการบรรจุกุญแจสาธารณะจะมีข้อมูลเพิ่มเติมเช่นผู้ออกใบรับรองสิ่งที่ควรใช้สำหรับใบรับรองและเมตาดาต้าประเภทอื่น
โดยทั่วไปแล้วใบรับรองจะลงนามโดยผู้ออกใบรับรอง (CA) โดยใช้คีย์ส่วนตัวของ CA สิ่งนี้จะตรวจสอบความถูกต้องของใบรับรอง
openssl
คำสั่งสามารถถอดรหัส และแยกวิเคราะห์สิ่งเหล่านี้หรือคุณสามารถใช้ยูทิลิตีออนไลน์เช่นนี้: lapo.it/asn1js
ให้บอกว่า บริษัท A มีคู่คีย์และต้องการเผยแพร่คีย์สาธารณะของเขาสำหรับการใช้งานสาธารณะ (aka ssl บนเว็บไซต์ของเขา)
ดังนั้นรหัสสาธารณะของ บริษัท A ที่ลงนามด้วยคีย์ส่วนตัวของ CA ที่ถูกต้องจึงเรียกว่าใบรับรองของ บริษัท A
ให้ฉันอธิบายด้วยตัวอย่าง
ใน PKI ตามคู่กุญแจปกติจะมีคีย์ส่วนตัวและกุญแจสาธารณะ
ในระบบที่ใช้ใบรับรองมีคีย์ส่วนตัวและใบรับรอง ใบรับรองเก็บข้อมูลมากกว่าคีย์สาธารณะ
ตัวอย่าง (คุณสามารถสร้างใบรับรองและรหัสส่วนตัว): http://www.selfsignedcertificate.com/
คุณสามารถดาวน์โหลดเปิดไฟล์กุญแจส่วนตัวและไฟล์ใบรับรองคุณเห็นไฟล์ใบรับรองมีข้อมูลมากมายดังที่แสดงด้านล่าง
คุณสามารถจับคู่ใบรับรองที่สร้างขึ้น (เปิดโดยตัวแก้ไขข้อความ) และคีย์ส่วนตัว (เปิดโดยตัวแก้ไขข้อความ) จากไซต์นี้: https://www.sslshopper.com/certificate-key-matcher.html
หากใบรับรองตรงกับกุญแจส่วนตัวของลูกค้าลูกค้ามั่นใจว่าใบรับรองนั้นมอบให้โดยลูกค้าหรือมอบให้โดยตัวแทนที่เชื่อถือได้ (CA) ของลูกค้า
แต่มีปัญหาในการคีย์ส่วนตัวเท่านั้นและการสื่อสารตามใบรับรอง
เนื่องจากทุกคนสามารถสร้างใบรับรองและคีย์ส่วนตัวของตนเองได้ดังนั้นการจับมืออย่างง่ายจึงไม่ได้พิสูจน์อะไรเลยเกี่ยวกับเซิร์ฟเวอร์อื่นนอกจากเซิร์ฟเวอร์จะรู้รหัสส่วนตัวที่ตรงกับกุญแจสาธารณะของใบรับรอง วิธีหนึ่งในการแก้ไขปัญหานี้คือการให้ลูกค้ามีชุดของใบรับรองหนึ่งใบหรือมากกว่าที่ไว้วางใจ หากใบรับรองไม่ได้อยู่ในชุดเซิร์ฟเวอร์ไม่ได้ที่จะได้รับความเชื่อถือ
มีข้อเสียหลายวิธีง่าย ๆ นี้ เซิร์ฟเวอร์ควรสามารถอัปเกรดเป็นคีย์ที่แข็งแกร่งขึ้นเมื่อเวลาผ่านไป ("การหมุนเวียนคีย์") ซึ่งจะแทนที่คีย์สาธารณะในใบรับรองด้วยรหัสใหม่ น่าเสียดายที่ตอนนี้แอปไคลเอนต์ต้องได้รับการอัปเดตเนื่องจากการเปลี่ยนแปลงการกำหนดค่าเซิร์ฟเวอร์เป็นหลัก นี่เป็นปัญหาโดยเฉพาะอย่างยิ่งหากเซิร์ฟเวอร์ไม่ได้อยู่ภายใต้การควบคุมของผู้พัฒนาแอปตัวอย่างเช่นหากเป็นบริการเว็บของบุคคลที่สาม วิธีนี้ยังมีปัญหาหากแอปต้องพูดคุยกับเซิร์ฟเวอร์ตามอำเภอใจเช่นเว็บเบราว์เซอร์หรือแอพอีเมล
เพื่อแก้ไขข้อเสียเหล่านี้โดยทั่วไปแล้วเซิร์ฟเวอร์จะได้รับการกำหนดค่าด้วยใบรับรองจากผู้ออกใบรับรองที่มีชื่อเสียงที่เรียกว่า Certificate Authorities (CA) เขาโฮสต์แพลตฟอร์ม (ไคลเอนต์) โดยทั่วไปประกอบด้วยรายการของ CA ที่รู้จักกันดีที่ไว้วางใจ เช่นเดียวกับเซิร์ฟเวอร์ CA มีใบรับรองและคีย์ส่วนตัว เมื่อออกใบรับรองสำหรับเซิร์ฟเวอร์ CA จะลงนามใบรับรองเซิร์ฟเวอร์โดยใช้คีย์ส่วนตัว จากนั้นไคลเอ็นต์สามารถตรวจสอบว่าเซิร์ฟเวอร์มีใบรับรองที่ออกโดย CA ซึ่งเป็นที่รู้จักในแพลตฟอร์ม
อย่างไรก็ตามในขณะที่การแก้ปัญหาบางอย่างใช้ CAs แนะนำอีก เนื่องจาก CA ออกใบรับรองสำหรับเซิร์ฟเวอร์จำนวนมากคุณยังคงต้องการวิธีที่จะทำให้แน่ใจว่าคุณกำลังพูดคุยกับเซิร์ฟเวอร์ที่คุณต้องการ ในการแก้ไขปัญหานี้ใบรับรองที่ออกโดย CA จะระบุเซิร์ฟเวอร์ด้วยชื่อเฉพาะเช่น gmail.com หรือชุดของโฮสต์ที่มีการใช้สัญลักษณ์แทนเช่น * .google.com
ตัวอย่างต่อไปนี้จะทำให้แนวคิดเหล่านี้เป็นรูปธรรมมากขึ้น ในตัวอย่างด้านล่างจากบรรทัดคำสั่งคำสั่ง s_client เครื่องมือ openssl จะดูที่ข้อมูลใบรับรองเซิร์ฟเวอร์ของ Wikipedia มันระบุพอร์ต 443 เพราะนั่นเป็นค่าเริ่มต้นสำหรับ HTTPS คำสั่งส่งเอาต์พุตของ openssl s_client ไปยัง openssl x509 ซึ่งจัดรูปแบบข้อมูลเกี่ยวกับใบรับรองตามมาตรฐาน X.509 โดยเฉพาะคำสั่งจะถามหัวเรื่องซึ่งมีข้อมูลชื่อเซิร์ฟเวอร์และผู้ออกซึ่งระบุ CA
$ openssl s_client -connect wikipedia.org:443 | openssl x509 -noout -subject -issuer
subject= /serialNumber=sOrr2rKpMVP70Z6E9BT5reY008SJEdYv/C=US/O=*.wikipedia.org/OU=GT03314600/OU=See www.rapidssl.com/resources/cps (c)11/OU=Domain Control Validated - RapidSSL(R)/CN=*.wikipedia.org
issuer= /C=US/O=GeoTrust, Inc./CN=RapidSSL CA
คุณจะเห็นว่ามีการออกใบรับรองสำหรับเซิร์ฟเวอร์ที่ตรงกับ * .wikipedia.org โดย RapidSSL CA
อย่างที่คุณเห็นเนื่องจากข้อมูลเพิ่มเติมนี้ส่งโดย CA ไปยังเซิร์ฟเวอร์ลูกค้าสามารถทราบได้อย่างง่ายดายว่ากำลังสื่อสารกับเซิร์ฟเวอร์หรือไม่
รองรับ SSL ใบรับรองจะได้รับจากการรับรองที่เชื่อถือได้มีอำนาจซึ่งรับรองสำหรับการเชื่อมต่อที่ปลอดภัยของเว็บไซต์ ใบรับรอง SSL มักจะมีโลโก้ของการรับรองความถูกต้องและคีย์สาธารณะที่จำเป็นในการเข้ารหัสและถอดรหัสข้อมูลที่จะส่งไปยังคอมพิวเตอร์ ฟังก์ชั่นคีย์ SSL
สามารถสร้างคีย์ SSL ได้หลายอย่างในระหว่างเซสชัน พวกเขาจะใช้ในการเข้ารหัสและถอดรหัสข้อมูลที่ถูกส่งไปยังและจากคอมพิวเตอร์คีย์ที่ใช้ในการตรวจสอบว่าข้อมูลที่ไม่ได้รับการแก้ไขหรือดัดแปลงด้วย
ความแตกต่างของวัฏจักร
ใบรับรองมีอายุการใช้งานนานกว่าคีย์ SSL ใบรับรอง SSL นั้นได้รับจากหน่วยงานออกใบรับรองซึ่งสามารถต่ออายุเป็นประจำโดยธนาคารและธุรกิจ ในทางกลับกันคีย์ SSL หรือคีย์เซสชันจะถูกสร้างขึ้นโดยไม่ซ้ำกันระหว่างเซสชันและจะถูกยกเลิกเมื่อสิ้นสุดเซสชัน
ตกลงกันเถอะทำลายมันเพื่อให้คนที่ไม่ใช่ช่างเทคนิคเข้าใจ
คิดว่ามันเป็นอย่างนี้ ใบรับรองเปรียบเสมือนตู้นิรภัยที่ธนาคารของคุณ มันมีสิ่งที่สำคัญมากมาย โดยทั่วไปสิ่งที่มีตัวตนของคุณ ใบรับรองมีพับลิกคีย์และต้องการไพรเวตคีย์เพื่อเปิด
กล่องนิรภัยของคุณใช้สองปุ่มเพื่อเปิดเช่นเดียวกับใบรับรอง
พร้อมตู้นิรภัยรหัสของธนาคารก็เหมือนกุญแจสาธารณะเนื่องจากอยู่ที่ธนาคารและกุญแจสาธารณะอยู่กับใบรับรอง คุณมีรหัสส่วนตัวซึ่งจำเป็นในการ "รับใบรับรองของคุณ" และในตัวอย่างของตู้เซฟจำเป็นต้องใช้กุญแจส่วนตัวของคุณนอกเหนือจากรหัสสาธารณะเช่นกัน
ก่อนที่คุณจะสามารถเปิดตู้นิรภัยได้คุณต้องยืนยันตัวตนของคุณก่อน (ชนิดของคำขอใบรับรอง) เมื่อคุณได้รับการระบุแล้วคุณสามารถใช้กุญแจส่วนตัวของคุณพร้อมกับกุญแจสาธารณะเพื่อเปิดตู้เซฟ นี่เป็นเพียงการขอใบรับรองจากนั้นรับใบรับรองจากหน่วยงานออกใบรับรอง (ตราบใดที่คุณสามารถระบุได้ (เชื่อถือได้) และคุณมีรหัสที่ถูกต้อง)