12/04/2026 18:16น.

EP.125 TLS / WSS และ Certificate Management สำหรับ WebSocket (Production & Enterprise)
#WebSocket TLS
#WSS WebSocket
#WebSocket
#Go
ถ้า EP.124 คือการ “ล็อกประตูด้วย Authentication”
EP.125 คือการ “เสริมเกราะทั้งอาคาร” ด้วย TLS และ Certificate ที่ถูกต้อง
เพราะ WebSocket ที่ ไม่มี WSS = ข้อมูลสามารถถูกดักฟัง แก้ไข หรือปลอมแปลงได้ง่ายกว่าที่คิด แม้ระบบภายในจะ Auth ดีแค่ไหนก็ตาม
🎯 เป้าหมายของบทความนี้
หลังอ่านจบ คุณจะเข้าใจ:
- ความแตกต่างระหว่าง HTTPS vs WSS
- TLS Handshake ทำงานอย่างไรกับ WebSocket
- การจัดการ Certificate ในระบบ Production
- การทำ Zero-downtime Certificate Renewal
- Best Practices สำหรับ WebSocket ระดับ Enterprise
🔍 HTTPS vs WSS ต่างกันอย่างไร?
| Protocol | ใช้กับ | ความปลอดภัย |
|---|---|---|
| HTTP | Web ธรรมดา | ❌ ไม่เข้ารหัส |
| HTTPS | REST / Web | ✅ TLS |
| WS | WebSocket | ❌ ไม่เข้ารหัส |
| WSS | WebSocket | ✅ TLS |
❗ WebSocket ที่เป็น ws:// ไม่ปลอดภัย แม้เว็บหลักจะเป็น https:// ก็ตาม
🧠 ความจริงที่หลายคนพลาด
- HTTPS ≠ WSS
- TLS ไม่ถูกแชร์อัตโนมัติ ระหว่าง HTTP และ WebSocket
- ถ้า WebSocket ใช้
ws://→ ข้อมูลจะวิ่งแบบ Plain Text
เพิ่มเติมที่สำคัญ:
- Browser จะ block
ws://หากหน้าเว็บโหลดผ่านhttps:// - ระบบ Production ทุกระบบ ต้องใช้
wss://เท่านั้น
👉 ไม่มีข้อยกเว้นสำหรับระบบจริง
🔐 TLS Handshake กับ WebSocket ทำงานอย่างไร?
ลำดับการทำงานจริง:
Client
↓ TLS Handshake
Server
↓ Certificate Verification
Secure Channel Established
↓ HTTP Upgrade (101 Switching Protocols)
WebSocket Connected (Encrypted)
📌 TLS ทำงานก่อน WebSocket เสมอ
WebSocket จะถูกสร้างขึ้นก็ต่อเมื่อ Secure Channel พร้อมแล้วเท่านั้น
📜 Certificate คืออะไร (ในมุม WebSocket)
Certificate ทำหน้าที่หลัก 3 อย่าง:
- ยืนยันตัวตนของ Server (Authentication)
- เข้ารหัสข้อมูล (Confidentiality)
- ป้องกัน Man-in-the-Middle Attack
ข้อสำคัญ:
- WebSocket ใช้ Certificate เดียวกับ HTTPS
- ไม่มี Certificate แยกสำหรับ WebSocket โดยเฉพาะ
🧩 ตัวอย่างตั้งค่า WSS ใน Go (พื้นฐาน Production)
server := &http.Server{
Addr: ":443",
Handler: router,
TLSConfig: &tls.Config{
MinVersion: tls.VersionTLS12,
},
}
log.Fatal(server.ListenAndServeTLS(
"/cert/fullchain.pem",
"/cert/privkey.pem",
))
✅ แนะนำ:
- TLS 1.2+ เท่านั้น
- หากเป็นระบบใหม่ ควรเปิด TLS 1.3 ด้วย
🔄 Certificate Rotation คืออะไร?
ปัญหาที่พบบ่อย
- Certificate มีวันหมดอายุ
- Restart Server = WebSocket หลุดทั้งหมด ❌
- ผู้ใช้ reconnect พร้อมกัน → Load พุ่ง
เป้าหมายของระบบที่ดี
เปลี่ยน Certificate ได้
โดยไม่กระทบ WebSocket Connection ที่กำลังใช้งานอยู่
♻️ Zero-downtime Certificate Renewal (แนวคิดที่ใช้จริง)
แนวทางระดับ Production:
- ทำ TLS Termination ที่ Load Balancer / Reverse Proxy
- Reload Certificate แบบ Runtime
- Rolling Update ทีละ Instance (หากจำเป็น)
🏗️ Best Practice Architecture
Client
↓ WSS
Load Balancer / Reverse Proxy (TLS Termination)
↓ WS (Internal)
WebSocket Servers
ข้อดีของโครงสร้างนี้
- เปลี่ยน Certificate ที่ Load Balancer ได้
- WebSocket Server ไม่ต้อง restart
- Scale ง่าย
- ลดความซับซ้อนของ Certificate Management
🌱 Let’s Encrypt สำหรับ WebSocket
Let’s Encrypt:
- ฟรี
- Trusted โดย Browser
- Auto-renew
- ใช้ได้ทั้ง HTTPS และ WSS
Tools ที่นิยม
- Certbot
- acme.sh
- Kubernetes cert-manager
🔧 ตัวอย่าง Certbot Renewal (แนวคิด)
certbot renew --quiet
systemctl reload nginx
📌 Reload ≠ Restart
WebSocket Connection จะไม่ถูกตัด
☁️ Kubernetes + cert-manager (Production Grade)
แนวทางที่ใช้จริง:
- cert-manager + Let’s Encrypt
- Auto renew
- Zero downtime
ตัวอย่าง Certificate Resource:
apiVersion: cert-manager.io/v1
kind: Certificate
spec:
secretName: ws-tls
dnsNames:
- ws.example.com
Ingress / Gateway จะ reload cert ให้โดยอัตโนมัติ
🛑 Common Mistakes ที่ควรเลี่ยง
❌ ใช้ self-signed certificate ใน production
❌ เปิด TLS version ต่ำ
❌ Hard-code path certificate
❌ Restart server ทุกครั้งที่ renew cert
❌ ไม่ทดสอบ renewal ล่วงหน้า
🧪 Checklist ก่อนขึ้น Production
✅ ใช้ wss:// เท่านั้น
✅ TLS 1.2+ (แนะนำ 1.3)
✅ Auto certificate renewal
✅ No server restart on renew
✅ ใช้ Load Balancer / Reverse Proxy
✅ Test renewal ก่อน cert หมดอายุจริง
🚀 ท้าให้ลอง!
ลอง Audit ระบบ WebSocket ของคุณ:
- เชื่อมต่อด้วย
wss:// - ตรวจ TLS version ที่ใช้จริง
- จำลอง certificate ใกล้หมดอายุ
- Renew cert โดยไม่ restart server
ถ้าทำได้ครบ 👉 ระบบของคุณ พร้อม Production จริงแล้ว 🔥
🔮 EP ถัดไป EP.126 DDoS Protection & Rate Limiting สำหรับ WebSocket
เราจะเจาะลึก:
- Connection Flood
- Rate Limit ต่อ IP / User
- ป้องกัน Bot & Abuse
- WebSocket Security ในสนามจริง