Network
DNS & HTTP
HTTP vs HTTPS
ความแตกต่างระหว่าง HTTP และ HTTPS, บทบาทของ TLS/SSL, ใบรับรอง certificate และเหตุผลที่เว็บยุคใหม่ต้องใช้ HTTPS
1. Core Idea: HTTP และ HTTPS คืออะไร
HTTP (HyperText Transfer Protocol) คือ protocol ที่ browser ใช้สื่อสารกับ web server เมื่อคุณเปิดเว็บ browser ส่ง HTTP request และ server ตอบกลับด้วย HTTP response HTTPS = HTTP + TLS (Transport Layer Security) TLS เพิ่มการเข้ารหัสข้อมูลระหว่างการส่ง ทำให้แม้ถูกดักก็อ่านไม่ได้ และยืนยันตัวตน server ด้วย Certificate
- HTTP ใช้ Port 80, HTTPS ใช้ Port 443
- HTTP ส่งข้อมูลเป็น plain text — ใครดักได้อ่านได้ทันที
- HTTPS เข้ารหัสด้วย TLS — ดักได้แต่ decrypt ไม่ได้ถ้าไม่มี private key
- ปัจจุบัน browser ทุกตัวแสดง 🔒 สำหรับ HTTPS และ 'Not Secure' สำหรับ HTTP
2. Mental Model: ไปรษณีย์ธรรมดา vs ไปรษณีย์ลับ
HTTP เหมือนส่งจดหมายในซองโปร่งใส — ไปรษณีย์ (ISP/router) หรือใครก็ตามสามารถอ่านข้อความได้ HTTPS เหมือนส่งจดหมายในตู้เซฟที่มีรหัส — แม้ไปรษณีย์จะเห็นว่ามีตู้เซฟ แต่เปิดอ่านไม่ได้ TLS Certificate เปรียบได้กับบัตรประจำตัวที่มีหน่วยงานรับรอง — ยืนยันว่า server ที่คุณคุยด้วยเป็นของแท้ ไม่ใช่ผู้แอบอ้าง
HTTP ส่งข้อมูลดิบอ่านได้ทันที · HTTPS เข้ารหัสให้อ่านไม่ได้แม้ถูกดัก
3. TLS Handshake — วิธีที่ HTTPS เริ่ม session
ก่อนส่งข้อมูลจริงผ่าน HTTPS จะเกิด TLS Handshake เพื่อตกลง encryption key และยืนยันตัวตน server
- 1) Client Hello — browser ส่ง TLS version ที่รองรับ และ cipher suites ที่ใช้ได้
- 2) Server Hello — server เลือก TLS version และ cipher suite ที่จะใช้
- 3) Certificate — server ส่ง TLS certificate (มีชื่อ domain + public key + ลาย CA)
- 4) Certificate Verify — browser ตรวจว่า certificate ออกโดย CA ที่เชื่อถือได้ และยังไม่หมดอายุ
- 5) Key Exchange — ทั้งสองฝ่ายตกลง session key สำหรับเข้ารหัส (ไม่ผ่าน network โดยตรง)
- 6) Finished — ส่ง 'Finished' message ที่เข้ารหัสแล้ว ยืนยันว่า handshake สำเร็จ
- 7) Application Data — ส่ง HTTP request/response จริง ทุกอย่างเข้ารหัสแล้ว
4. TLS Certificate คืออะไร
TLS Certificate คือไฟล์ที่ยืนยันตัวตนของ server ออกโดย Certificate Authority (CA) เช่น Let's Encrypt, DigiCert, Comodo
| ข้อมูลใน Certificate | ความหมาย |
|---|---|
| Common Name / SANs | domain ที่ certificate รองรับ เช่น *.google.com |
| Issuer | CA ที่ออก certificate |
| Valid From / Until | วันที่เริ่มและหมดอายุ |
| Public Key | ใช้ encrypt ข้อมูลในช่วง key exchange |
| Signature | ลายเซ็น CA ยืนยันว่าข้อมูลถูกต้อง |
Let's Encrypt ให้ certificate ฟรีและมี auto-renewal — ทำให้ HTTPS เข้าถึงได้ง่ายมากขึ้น ปัจจุบัน tool เช่น Certbot หรือ Caddy ทำ TLS ให้อัตโนมัติโดยไม่ต้องตั้งค่าเอง
5. ทำไม HTTPS ถึงสำคัญ
- Privacy — ข้อมูล password, card number, session token ไม่ถูกดักอ่านระหว่างทาง
- Integrity — ข้อมูลไม่ถูกแก้ไขระหว่างทาง (tampering) เช่น inject ads
- Authentication — มั่นใจว่า server เป็นของแท้ ไม่ใช่ผู้แอบอ้าง (MITM)
- SEO — Google ให้ HTTPS rank สูงกว่า HTTP
- HTTP/2 และ HTTP/3 — browser ส่วนใหญ่กำหนดว่า HTTP/2 ต้องใช้ TLS
- Browser UX — Chrome และ Firefox แสดง 'Not Secure' บน HTTP ทำให้ user ไม่ไว้ใจ
6. Practical Notes: จุดสับสนของมือใหม่
- HTTPS ≠ ปลอดภัยจากทุกอย่าง — encrypt แค่การส่งข้อมูล ไม่ได้ป้องกัน bug ใน server
- Mixed content warning — ถ้า HTTPS page โหลด resource จาก HTTP จะมี warning
- Certificate หมดอายุ → browser แจ้ง error และ user ไม่ควรเข้า — ตั้ง auto-renew ไว้เสมอ
- Self-signed certificate ใช้ dev ได้ แต่ browser จะ warn — production ต้องใช้ CA จริง
- HSTS (HTTP Strict Transport Security) บังคับให้ browser ใช้ HTTPS เท่านั้น
7. Recap + เชื่อมไปบทถัดไป
- HTTP = protocol ส่งข้อมูลเว็บ port 80 · HTTPS = HTTP + TLS port 443
- TLS เข้ารหัสข้อมูล, ยืนยันตัวตน server ด้วย Certificate
- TLS Handshake เกิดขึ้นก่อนส่งข้อมูลจริง เพื่อตกลง key และตรวจ certificate
- Let's Encrypt ทำให้ certificate ฟรีและต่ออายุอัตโนมัติ
- บทถัดไปจะอธิบาย Request-Response Cycle — HTTP ทำงานอย่างไรในรายละเอียด