ก่อนที่จะทำความเข้าใจการทำงานของ SSL ต้องทำความรู้จักกับการเข้ารหัสแบบ
Private Key/ Public key นิดนึงก่อน ก็คือ ข้อมูลที่ถูกเข้ารหัสด้วย Public
key ใดๆ
จะสามารถถอดรหัสได้โดยใช้ Private key ที่ถูกสร้างขึ้นมาคู่กันเท่านั้น (ใช้ Public key ที่ใช้เข้ารหัส มาถอดรหัสกลับก็ไม่ได้)
ต่อไปจะยกตัวอย่างการใช้ SSL กับโปรโตคอล HTTP (จริงๆ แล้วใช้กับโปรโตคอลอื่นเช่น
FTP ก็ได้) โดยจะมีผู้ที่เกี่ยวข้องหลักๆ 3 ฝ่าย ดังนี้
-
ผู้ใช้ หรือ User หรือสำหรับในที่นี้
คือ Web Browser (IE, Firefox ฯลฯ) นั่นเอง (เพราะเรากล่าวถึง
HTTP หรือการใช้งานเว็บไซต์)
-
ผู้ให้บริการ หรือ Web Server หรือเครื่องคอมพิวเตอร์ที่คอยส่งหน้าเว็บให้เราดูนั่นแหละ ต่อไปเรียกย่อๆ ว่า Server
หรือผู้ให้บริการ
-
บริษัทที่ออก Certificate ให้ผู้บริการ หรือ
Certificate Authorities ซึ่งต่อไปจะเรียกว่า CA
เรื่องเริ่มจาก “ผู้ให้บริการ”
อยากจะให้เกิดความปลอดภัยในการสื่อสารข้อมูล (ผ่านเว็บ)
กับ “ผู้ใช้” และทำให้เว็บดูน่าเชื่อถือด้วย โดยที่ผู้ให้บริการ จะดำเนินการดังนี้
1.
ผู้ให้บริการ ทำการสร้าง “Private” key ของตัวเองขึ้นมาบน
Web Server (แต่ละ OS/Server จะมีขั้นตอนการสร้างที่ต่างกัน) แล้วจะได้ข้อมูล Private Key และรายละเอียดต่างๆ
เรียกว่า Certificate Signing Request (CSR)
2.
ผู้ให้บริการ ส่ง Private Key ที่สร้างขึ้นมาให้กับ
CA เพื่อขอ “Public” Key ที่คู่กัน (CA ตรวจสอบว่าผู้ให้บริการเป็นเจ้าของ
web จริง แล้วสร้าง Public Key ที่คู่กัน แล้วเก็บเงินค่าบริการกับผู้ให้บริการ
$$$)
3.
CA ส่ง Public Key ที่สร้างขึ้นกลับไปให้กับผู้ให้บริการ
(โดย Public Key ที่ส่งกลับไปจะถูกเข้ารหัสด้วย Private Key ของ CA
เอง)
4.
ผู้ให้บริการ ทำการติดตั้ง Public Key ที่ได้จาก CA
ลงบน
Web Server (จะต้องเป็นเครื่องเดียวกับที่สร้าง CSR)
ทีนี้มาดู เมื่อ Web Server ติดตั้ง Certificate เรียบร้อยแล้ว
และสามารถใช้โปรโตคอล HTTPS (HTTP over SSL) ได้แล้ว
มาดูการว่า มันจะ Secure ยังไง
สมมุตติ Web Site ของผู้ให้บริการคือ http://xyz.com เมื่อมีผู้ใช้ต้องการใช้งาน
web โดยผ่าน SSL จะมีขั้นตอนต่อไปนี้
1.
User (หรือ Browser) ส่ง request
ไปที่
https://xyz.com (สังเกตว่าจากเดิมใช้ http ตอนนี้เป็น https)
2.
Server ส่ง Public Key กลับมาให้ User
(Browser) และเป็นหน้าที่ของ Browser ที่จะตรวจว่า Public Key ที่ส่งมา
ได้มาจาก CA ที่เชื่อถือได้ ละยังไม่หมดอายุหรือไม่
3.
ถ้าเชื่อถือได้ Browser จะสร้าง random
key ขึ้นมา
(ตอนนี้ browser เท่านั้นที่มี random key นี้) แล้วเข้ารหัสด้วย Public Key ที่ได้จาก server
แล้วส่งกลับไปให้
Server
4.
เมื่อ Server ได้รับ random
key (ที่ถูกเข้ารหัสไว้)
และสามารถถอดรหัสออกมาได้ (โดยใช้ Private key บน server) ก็แสดงว่าเป็นเจ้าของ
public key ที่ส่งไปให้ browser จริง และตอนนี้ มีแค่ server กับ browser
เท่านั้นที่รู้จัก
random key นี้
5.
จากจุดนี้ไป การสื่อสารระหว่าง User (Browser)
กับ
Server จะใช้ random key นี้ในการเข้าระหัสและถอดรหัส ซึ่งบางที random
key นี้เรียกว่า
Session Key
*** จะเห็นว่า Public
Key กับ
Private Key ของ Server นั้น จะไม่ถูกใช้ในการเข้าหรือถอดรหัสข้อมูลจริงๆ หลังจากที่มี session
key แล้ว
เนื่องจากกระบวนการเข้า/ถอดรหัส ใช้เวลามากกว่านั่นเอง หรือพูดง่ายๆ ก็คือ Public/Private
key ใช้ในการเข้า/ถอดรหัสเพื่อ ส่ง
session key จาก Browser ให้กับ Server อย่างปลอดภัยเท่านั้น***