4546 คำ
23 นาที
CyberSecurity Foundation EP.23 — PKI + Certificates: Chain of Trust + DigiNotar
สารบัญ
ปัญหาความเชื่อ — Crypto บอก “encrypt อย่างไร” แต่ไม่บอก “เชื่อใคร” 3 ส่วนของ PKI — CA, RA, Repository CA — นายอำเภอที่ลงนาม RA — เคาน์เตอร์ลงทะเบียนที่ตรวจตัวตน Repository — ระบบ public ที่ทุกคนเช็คได้ CA Hierarchy — ราชวงศ์, ขุนนาง, บัตรประชาชน ทำไมต้องมี Intermediate — ทำไม Root ไม่ออก leaf cert ตรงๆ? Cross-signing — ขุนนางที่มีตราจากหลายราชวงศ์ X.509 Certificate Anatomy — เปิดบัตรประชาชนดิจิทัลดูทีละบรรทัด Subject — บัตรนี้เป็นของใคร Issuer — ใครเป็นคนออกบัตรนี้ Validity — บัตรนี้ใช้ได้เมื่อไหร่ถึงเมื่อไหร่ Public Key — กุญแจ public ของเจ้าของบัตร Signature — ตราประทับของ Issuer SAN (Subject Alternative Names) — เว็บอื่นที่ใช้บัตรเดียวกันได้ Lifecycle — ออกบัตร, ต่ออายุ, ยกเลิก ขั้นที่ 1 — Generate Key Pair + CSR ขั้นที่ 2 — Domain Validation + Issue ขั้นที่ 3 — Install + Use ขั้นที่ 4 — Renew หรือ Revoke Revocation — CRL, OCSP, OCSP Stapling CRL (Certificate Revocation List) — รุ่นแรก ที่ตายไปแล้ว OCSP (Online Certificate Status Protocol) — รุ่นที่ 2 OCSP Stapling — ปัจจุบัน best practice CRL Sets ของ Google + OneCRL ของ Mozilla — Hybrid approach Certificate Transparency + DigiNotar — เคสที่เปลี่ยนทั้งวงการ DigiNotar 2011 — ราชวงศ์ของฮอลแลนด์ที่ถูกปลอม ทำไมไม่มีใครรู้ก่อน 2 เดือน? ผลลัพธ์ใน 3 สัปดาห์ ที่ DigiNotar ทิ้งไว้ — Certificate Transparency Symantec distrust 2018 — เคสที่ใหญ่ที่สุดในวงการหลัง DigiNotar Let’s Encrypt 3M revoke ปี 2020 — เคสที่ดีที่สุดของ “หลังบ้านเก่ง” 11 ความเสี่ยง PKI ที่ enterprise เจอบ่อย PKI Audit — 7 ส่วนที่ผู้ตรวจสอบมอง 1. CA Review 2. RA Review 3. Certificate Policy (CP) Review 4. Certification Practice Statement (CPS) Review 5. CRL + OCSP Review 6. Key Management Review 7. Compliance Review สรุป — ราชวงศ์, ขุนนาง, บัตร — ระบบความเชื่อของอินเทอร์เน็ตทั้งโลก สิ่งที่ผู้นำต้องจำ Tease EP.24 — TLS / HTTPS: ตู้ขนเงินหุ้มเกราะ

Series: CyberSecurity Foundation — รากฐาน Security สำหรับยุค AI (ภาษาคน)

Part 0 — WHY: เมืองนี้ทำไมต้องมียาม

Part 1 — HOW: ระบบนิเวศของเมือง

Part 2 — Identity: บัตรประชาชน + กุญแจห้อง

Part 3 — Data: ของในเซฟ

Part 4 — Infrastructure: ถนน กำแพง ท่อ

Part 5 — Operations: ตำรวจ ดับเพลิง สืบสวน

Part 6 — Governance: เทศบาล + กฎหมายเมือง

→ สารบัญรวมของซีรีส์ (Hub)

ครับ EP.21 ผมพาคุณดู Asymmetric crypto กุญแจ 2 ดอก Public key ใครก็เห็นได้ ใช้ encrypt และ verify signature ส่วน Private key เก็บคนเดียว ใช้ decrypt และ sign เปรียบเป็นตู้ไปรษณีย์ที่ใครก็ใส่จดหมายได้ แต่เปิดได้คนเดียว

ทีนี้ลองนึกฉากนี้ครับ. คุณกำลังจะ login เข้า Gmail. browser ของคุณส่งคำขอไปที่ gmail.com — server ตอบกลับมาพร้อม public key หนึ่งดอก. server บอกว่า — “นี่คือ public key ของ Google ครับ. ใช้อันนี้ encrypt password ของคุณ แล้วส่งมา”

แต่ — เอาตรงๆ — คุณจะรู้ได้ยังไงว่า public key ดอกนี้คือของ Google จริงๆ?

ถ้ามีโจรที่นั่งอยู่ตรงกลางระหว่างคุณกับ Google (เช่น Wi-Fi ฟรีของร้านกาแฟ) โจรอาจ ส่ง public key ของโจรเอง มาให้คุณ. คุณ encrypt password ด้วย public key ของโจร → โจร decrypt อ่านได้ทันที. นี่คือ Man-in-the-Middle attack (MITM) โจรเสียบตัวเองตรงกลาง

Crypto ตอบคำถาม “encrypt อย่างไร” ได้แล้ว — แต่ยังไม่ตอบคำถามที่ใหญ่กว่า: “เชื่อ key ใครได้บ้าง?”

EP นี้ผมพาคุณดู PKI (Public Key Infrastructure) — ระบบที่ตอบคำถามว่า “key นี้เป็นของจริงไหม”. เปรียบเทียบง่ายๆ ครับ — มันคือ ระบบบัตรประชาชนของอินเทอร์เน็ตทั้งโลก. ใน Part 3 เราเดินอยู่ในเซฟของเมือง. EP นี้เราขึ้นมาที่ ศาลากลาง — ที่ออกบัตรประชาชน + ตราประทับ + ยืนยันว่าใครเป็นใคร

ก่อนจะเดินดู CA / certificate / revocation / Certificate Transparency — ขอเริ่มจากคำถามที่อยู่ใต้ทั้งระบบนี้ครับ — “ทำไม crypto อย่างเดียวไม่พอ?”

ปัญหาความเชื่อ — Crypto บอก “encrypt อย่างไร” แต่ไม่บอก “เชื่อใคร”#

ลองนึกสถานการณ์ในโลกจริงครับ — คุณเดินทางไปต่างประเทศ. ถึงด่านตรวจคนเข้าเมือง — เจ้าหน้าที่ถามว่า “คุณคือใคร?”. คุณยื่น หนังสือเดินทาง ให้

ทีนี้คำถามที่ลึกขึ้นคือ เจ้าหน้าที่ตรวจคนเข้าเมืองของประเทศนี้ จะรู้ได้ยังไงว่าหนังสือเดินทางนี้ของจริง? เจ้าหน้าที่ไม่ได้รู้จักคุณเป็นการส่วนตัว. ไม่เคยเห็นหน้าคุณมาก่อน. ไม่รู้ว่าคุณคือใคร

คำตอบในโลกจริงคือ ตรา + ลายเซ็น + ลายน้ำ + chip บนหนังสือเดินทาง ที่ออกโดย รัฐบาลของประเทศคุณ. และเจ้าหน้าที่ของประเทศปลายทาง เชื่อรัฐบาลของประเทศคุณ เพราะมีข้อตกลงระหว่างประเทศ

ระบบความเชื่อในโลกจริงนี้มี 2 ส่วน:

  • Trust anchor — รัฐบาลที่ทุกประเทศตกลงกันว่าน่าเชื่อ (มี criteria + การตรวจสอบ)
  • Chain of trust — รัฐบาล → ออกหนังสือเดินทางให้ประชาชน → ประชาชนถือหนังสือเดินทางผ่านด่านได้

ในโลกดิจิทัล — PKI (Public Key Infrastructure) คือระบบเดียวกัน. ลองนึกบัตรประชาชน + ระบบราชการ + ตราประทับของรัฐ ทั้งหมดยกมาวางในอินเทอร์เน็ต

ทำไมถึงต้องมีระบบนี้? เพราะ asymmetric crypto ที่ EP.21 พูดถึง — ตอบคำถามได้แค่ “ถ้าคุณรู้แล้วว่า public key นี้เป็นของใคร — encrypt + verify ได้แน่นอน”. แต่ public key ดอกแรกที่คุณเห็น — ใครรับประกันว่ามันของจริง?

ในยุคแรกๆ ของ internet (ปี 1990s ตอนต้น) — คนเคยฝันว่าจะใช้ Web of Trust (PGP / GPG ใช้ model นี้) — คือ “ฉันเชื่อ A. A เชื่อ B. ดังนั้นฉันเชื่อ B”. แต่ระบบนี้ scale ไม่ขึ้น. ผู้ใช้ทั่วไปไม่ได้รู้จัก expert ที่จะ vouch ให้กัน

วงการเลยลงเอยกับอีก model หนึ่ง — Hierarchical PKI — มี trusted authority กลาง ที่ทุกคนเชื่อ — ออกบัตรประชาชนให้คนอื่น. นี่คือ model ที่ HTTPS ทั่วโลกใช้กันในวันนี้

มุมผู้บริหาร: PKI ฟังดูเหมือนเรื่อง deep technical — แต่จริงๆ มันคือเรื่อง trust governance ที่บริษัทคุณใช้อยู่ทุกวันโดยไม่รู้ตัว. ทุกครั้งที่พนักงานเปิด Gmail / Outlook / Salesforce — browser ของเขา ตัดสินใจอัตโนมัติว่าเชื่อ Google / Microsoft / Salesforce เพราะมี CA ที่ vouch ให้. ถ้าระบบนี้พัง (เช่นเคส DigiNotar ที่จะเล่าต่อ) — ทั้งบริษัทอาจ login เข้าเว็บปลอมโดยไม่รู้ตัว. ในมุม risk management — PKI คือ supply chain ของความเชื่อ ที่ทุกบริษัทใน internet ใช้ร่วมกัน

3 ส่วนของ PKI — CA, RA, Repository#

ก่อนจะเข้าโครงสร้างราชวงศ์ → ขุนนาง → บัตร ขอแกะให้เห็นก่อนครับว่า PKI ในวงการประกอบด้วย 3 ส่วนหลัก ที่ทำงานแยกกัน คนทั่วไปนึกถึง PKI = CA อย่างเดียว จริงๆ มีอีก 2 ส่วนที่สำคัญไม่แพ้กัน exam ของ CISA / Security+ / CISSP ออกเรื่องนี้บ่อย เพราะการแยก 3 ส่วนคือหัวใจของ separation of duties ในระดับวงการ

ลองนึกภาพ อำเภอที่ออกบัตรประชาชน เพื่อให้เห็นชัด:

  • CA (Certificate Authority) = นายอำเภอ คนที่ “ลงนาม” บัตรประชาชน มีอำนาจออก cert + revoke cert เก็บ private key ของอำเภอไว้ในตู้เซฟ
  • RA (Registration Authority) = เคาน์เตอร์ลงทะเบียน ของอำเภอ คนที่ “ตรวจตัวตน” ของผู้มาขอบัตร RA verify ก่อนว่าผู้ขอเป็นคนนั้นจริง แล้วค่อยส่งเรื่องให้ CA ลงนาม
  • Repository = ระบบ database สาธารณะ ของอำเภอ ที่ทุกคนสามารถมาเช็คได้ว่า “บัตรเลขนี้ของจริงไหม + ถูกยกเลิกหรือยัง”

CA — นายอำเภอที่ลงนาม#

หน้าที่หลักของ CA:

  • ออก cert (sign ด้วย private key ของตัวเอง)
  • revoke cert เมื่อ cert ถูก compromise / หมดความจำเป็น
  • publish CRL / OCSP response ให้วงการเช็คได้ตลอด
  • เก็บ private key ของ CA ใน HSM offline ให้ปลอดภัยที่สุด

CA = trust authority + key signer เป็น single source of truth ของทั้งระบบ

RA — เคาน์เตอร์ลงทะเบียนที่ตรวจตัวตน#

หน้าที่ของ RA คือ verify identity ของผู้ขอ cert ก่อนส่งให้ CA sign เช่น:

  • ผู้ขอ cert ของ mybank.com ส่ง CSR มา → RA ต้อง verify ว่าผู้ขอครอบครอง mybank.com จริง (DV / OV / EV ที่จะลงในหัวข้อ lifecycle)
  • ผู้ขอ cert ของพนักงานบริษัท → RA ต้อง verify ว่าพนักงานคนนี้ทำงานในบริษัทจริง + ระดับสิทธิ์ตรงกับที่ขอ

ทำไมต้องแยก RA ออกจาก CA? = separation of concerns เดียวกับ EP.16:

  • คนที่ verify identity (RA) ≠ คนที่ถือ private key signing (CA)
  • ถ้า RA โดน compromise → ออก cert ผิดได้ระยะหนึ่ง แต่ private key ของ CA ยังปลอดภัย
  • ถ้า CA โดน compromise → catastrophic ออก cert ปลอมได้ทุกอย่าง (เคส DigiNotar)

ในบริษัทขนาดกลางบ่อยครั้ง RA + CA = ทีมเดียวกัน (cost savings) ในวงการที่ critical จะ strict separation RA ทีมหนึ่ง CA ทีมหนึ่ง access ต่างกัน

Repository — ระบบ public ที่ทุกคนเช็คได้#

Repository = public directory ที่ store + distribute:

  • cert ทั้งหมดที่ออกแล้ว (เพื่อให้ใครก็ download มาใช้ได้)
  • CRL ล่าสุด (ที่จะลงในหัวข้อ revocation)
  • OCSP responder URL (endpoint ที่ browser ใช้ถามสถานะ)

Repository มักใช้ protocol อย่าง LDAP, HTTP, หรือ X.500 directory URL ของ Repository ฝังอยู่ในทุก cert (field ชื่อ CRL Distribution Points + Authority Information Access) browser อ่านแล้วรู้ทันทีว่าจะไปเช็คที่ไหน

ทำไม Repository สำคัญ? ลองนึกครับ ถ้า Repository ของ CA ใหญ่ๆ ล่มหรือถูก compromise:

  • browser download CRL เก่า → cert ที่ revoke ไปเมื่อวานยังถูกเชื่อ
  • โจรที่มี cert ที่ revoke แล้ว → ยังใช้ได้ต่อ
  • ไม่มี cert ใหม่ออกได้ระหว่าง Repository ล่ม → outage ทั้ง pipeline

Repository = availability point ที่หลายคนลืมว่าเป็นจุดเปราะของระบบ CA ใหญ่อย่าง DigiCert / Sectigo / Let’s Encrypt ใช้ CDN อย่าง Cloudflare / Akamai distribute Repository หลายร้อย edge ทั่วโลก เพื่อให้ down ทั้งระบบเป็นไปไม่ได้

มุมผู้บริหาร: ถ้าบริษัทคุณตั้ง internal CA เอง ขอ design ให้ครบ 3 ส่วนครับ หลายบริษัทตั้งแค่ CA แล้วใช้ทุกอย่างในเครื่องเดียว verify identity + sign cert + serve CRL ทั้งหมดอยู่ใน server เดียว ถ้าเครื่องนั้น compromise → ทั้งระบบล่ม + ไม่มีทางตรวจสอบย้อนหลังว่าใครออก cert อะไรไป pattern ที่วงการแนะนำคือ RA ทีมหนึ่ง access ระบบ identity (เช่น LDAP / AD), CA เก็บ private key ใน HSM offline, Repository run ในเครื่อง public-facing ที่ replicate หลาย region

CA Hierarchy — ราชวงศ์, ขุนนาง, บัตรประชาชน#

ทีนี้มาดูโครงสร้างของ PKI กัน. ผมขอใช้ภาพ ระบบบัตรประชาชนของเมือง เพื่อให้เห็นชัด

ใน PKI มี 3 ชั้น หลักที่ต้องจำ:

  • Root CA = ราชวงศ์ ที่ทุกคนในเมืองเชื่อ ไม่มีใครออกบัตรให้ราชวงศ์ ทุกคนเชื่อโดย default
  • Intermediate CA = ขุนนาง ที่ราชวงศ์แต่งตั้ง ราชวงศ์ออกตราประทับให้ขุนนางว่า “คนนี้แทนข้าได้”
  • Leaf certificate = บัตรประชาชน ของแต่ละคนหรือเว็บไซต์ ออกโดยขุนนาง

ลองนึกการเดินทางของความเชื่อจาก browser ของคุณไปถึง Gmail:

  1. คุณเปิด https://mail.google.com
  2. server ของ Gmail ส่ง leaf cert ของ mail.google.com กลับมา. ใน cert บอกว่า “ฉันคือ mail.google.com — ออกบัตรโดย GTS CA 1C3”
  3. GTS CA 1C3 คือ Intermediate CA. server แนบ cert ของ Intermediate มาด้วย. cert ของ Intermediate บอกว่า “ฉันคือ GTS CA 1C3 — ออกตราโดย GTS Root R1”
  4. GTS Root R1 = Root CA ของ Google. อยู่ใน trust store ของ browser ของคุณตั้งแต่ตอน install browser แล้ว
  5. browser เช็ค chain — ลายเซ็นของ Root → Intermediate → Leaf — ครบทุกชั้น → เชื่อ

นี่คือคำว่า “Chain of Trust” — ความเชื่อไหลจากบนลงล่าง

ทำไมต้องมี Intermediate — ทำไม Root ไม่ออก leaf cert ตรงๆ?#

คำถามดีครับ. คำตอบคือ — Root CA = single point of catastrophic failure

ลองนึกสถานการณ์ที่ private key ของ Root CA หลุดออกไป. โจรที่ได้ key ของ Root จะ:

  • ออก cert ปลอม ให้เว็บไหนก็ได้ในโลก ทุก browser ยอมเชื่อ
  • หลอกคนทั้ง internet ให้ login เข้าเว็บปลอม โดยที่ browser โชว์รูปกุญแจสีเขียว
  • ไม่มีทางเรียก Root cert กลับ เพราะ Root อยู่ใน trust store ของทุก browser ที่ install ไปแล้วทั่วโลก

ผลคือ ถ้า Root พัง = อินเทอร์เน็ตทั้งระบบที่ใช้ CA นี้พังตามทันที

ทางออกของวงการคือ Root CA ห้ามใช้ออก leaf cert โดยตรง. แทนที่จะใช้ Root จะ offline ส่วนใหญ่ของเวลา. เก็บไว้ใน Hardware Security Module (HSM) ที่ตู้เซฟใต้ดิน + ห้องที่ใช้ biometric เข้า + มีคนเฝ้า 24/7. ใช้แค่ปีละครั้ง เพื่อ sign Intermediate CA cert

Intermediate CA = expendable ถ้าโดน compromise → revoke ตัว Intermediate แล้วออกตัวใหม่ Root ยังปลอดภัย ระบบยังอยู่. นี่คือหลักการ “แบ่งความเสี่ยง” เหมือนกับ Defense in Depth ใน EP.04

ลองนึกในโลกจริง — ราชวงศ์ ไม่ออกบัตรประชาชนให้ประชาชนเอง. ราชวงศ์แต่งตั้ง ขุนนาง ที่มีหน้าที่ออกบัตร. ถ้าขุนนางคนหนึ่งโกง → ปลด → แต่งตั้งคนใหม่ — ราชวงศ์ไม่กระทบ

Cross-signing — ขุนนางที่มีตราจากหลายราชวงศ์#

อีก concept ที่ใช้บ่อยในวงการคือ cross-signing. Intermediate CA สามารถถูก sign โดย Root หลายตัว ได้

ตัวอย่างที่จริงที่สุดในวงการ — Let’s Encrypt. ตอนแรก Let’s Encrypt มี Root ของตัวเองชื่อ ISRG Root X1. แต่ Root ใหม่นี้ไม่ได้อยู่ใน trust store ของ browser เก่า / มือถือเก่า. ถ้าใช้ ISRG Root X1 ตรงๆ → คนใช้ browser เก่าจะเห็น “Untrusted”

Let’s Encrypt เลยขอให้ Root เก่าที่ทุก browser เชื่ออยู่แล้วชื่อ IdenTrust DST Root CA X3 มา cross-sign Intermediate ของตัวเอง. ผลคือ browser ที่ไม่รู้จัก ISRG Root X1 จะ follow chain ขึ้นไปจนเจอ DST Root X3 แล้วเชื่อได้

มุมผู้บริหาร: ลำดับชั้น Root → Intermediate → Leaf ใน PKI = หลักการเดียวกับ Separation of Duties ใน EP.16 คนที่ทำหน้าที่สำคัญที่สุด (Root) ไม่ทำงาน routine เอง มอบหมายให้ Intermediate ถ้า Intermediate ทำพลาด ระบบไม่ล่ม ถ้าบริษัทคุณมี internal CA (ของบริษัท ใช้ออก cert ภายใน) ขอให้ตรวจว่า Root CA ของคุณ offline ไหม + เก็บใน HSM ไหม + มี audit trail ตอนใช้ไหม pattern ของวงการที่เจอบ่อย — บริษัทตั้ง CA ของตัวเองแล้วเก็บ private key ของ Root ในเครื่อง server ที่เปิด 24/7 + ไม่มี HSM + ไม่มี audit log = ระเบิดเวลาที่รอจุด

X.509 Certificate Anatomy — เปิดบัตรประชาชนดิจิทัลดูทีละบรรทัด#

ทีนี้มาเปิดดู บัตรประชาชนดิจิทัล จริงๆ กันครับ. มาตรฐานของ cert ในวงการชื่อว่า X.509 — มีมาตั้งแต่ปี 1988 — เป็น format ที่ HTTPS / Email / VPN / Code signing ทั้งหมดในโลกใช้

ลองนึกถึงบัตรประชาชนไทยที่คุณมีในกระเป๋า. บนบัตรมี:

  • ชื่อ-นามสกุล
  • เลขบัตรประชาชน
  • วันเกิด
  • วันที่ออก + วันหมดอายุ
  • ที่อยู่
  • รูปภาพ
  • ตราของกรมการปกครอง
  • ลายเซ็นของผู้ออก

X.509 cert มีโครงสร้างเหมือนกัน — แต่เปลี่ยนเนื้อหาเป็น digital. มา breakdown ทีละ field ที่สำคัญครับ:

Subject — บัตรนี้เป็นของใคร#

Subject คือ “เจ้าของบัตร” — บอกว่า cert ใบนี้เป็นของใคร / เว็บไซต์ไหน. ใน cert ของ mail.google.com field นี้จะมี:

  • CN (Common Name) = mail.google.com (ชื่อหลักของเว็บ)
  • O (Organization) = Google LLC
  • L (Locality) = Mountain View
  • ST (State) = California
  • C (Country) = US

Issuer — ใครเป็นคนออกบัตรนี้#

Issuer คือ “ขุนนางที่ออกบัตรให้”. ใน cert ของ mail.google.com Issuer คือ GTS CA 1C3 (Intermediate ของ Google).

browser ใช้ field นี้เป็น link ไป cert ของชั้นถัดไป — เพื่อ verify chain ขึ้นไปจนเจอ Root

Validity — บัตรนี้ใช้ได้เมื่อไหร่ถึงเมื่อไหร่#

ทุก cert มี Not Before (วันเริ่มใช้ได้) + Not After (วันหมดอายุ). browser ปฏิเสธ cert ที่หมดอายุ หรือ cert ที่ยังไม่ถึงวันใช้

ในปี 2024 วงการบังคับให้ leaf cert ของเว็บไซต์มีอายุไม่เกิน 398 วัน (~13 เดือน). ก่อนหน้านี้เคยมี cert อายุ 10 ปี แต่วงการตัดลงเรื่อยๆ เพราะ:

  • ถ้า private key หลุด short-lived cert จำกัดความเสียหายให้สั้น
  • บังคับ automation ใครต่ออายุไม่เป็น = ไม่ควรมี cert
  • ในปี 2026 Google ผลักให้ลดเหลือ 47 วัน (ยังเป็น proposal แต่ทิศทางชัดเจน)

Public Key — กุญแจ public ของเจ้าของบัตร#

นี่คือ หัวใจ ของ cert. field นี้บรรจุ public key ของ Subject ที่ EP.21 พูดถึง — พร้อมบอกว่าเป็น algorithm อะไร (RSA 2048-bit / ECC P-256 / ECC P-384)

browser ใช้ public key นี้:

  • encrypt ข้อความที่จะส่งให้ server (ใน TLS handshake รุ่นเก่า)
  • verify signature ที่ server ส่งมา (ใน TLS handshake รุ่นใหม่ TLS 1.3)

Signature — ตราประทับของ Issuer#

ส่วนสุดท้ายที่สำคัญที่สุด — Signature ของ Issuer. Issuer (Intermediate CA) เอาทุก field ข้างบนนี้ — มา hash (EP.22) — แล้ว sign ด้วย private key ของ Intermediate

browser ที่ได้ cert มา จะ:

  1. เอาทุก field มา hash ใหม่
  2. ใช้ public key ของ Issuer (ใน cert ของ Intermediate) verify signature
  3. ถ้าตรง → cert ใบนี้ออกโดย Intermediate จริง — ไม่ถูกแก้กลางทาง

นี่คือจุดที่ Hashing (EP.22) + Asymmetric (EP.21) มาทำงานร่วมกัน. ลายนิ้วมือ + ลายเซ็น = ตราประทับที่ปลอมไม่ได้

SAN (Subject Alternative Names) — เว็บอื่นที่ใช้บัตรเดียวกันได้#

field ที่ สำคัญที่สุดในยุคปัจจุบัน — ที่หลายคนยังไม่รู้ — SAN (Subject Alternative Names)

ยุคก่อน — cert ใช้แค่ CN เพื่อบอกว่า cert นี้ใช้กับ domain ไหน. ปัญหา — CN รับได้แค่ 1 domain. ถ้าบริษัทมี www.example.com, mail.example.com, shop.example.com → ต้องออก cert 3 ใบ

SAN แก้ปัญหานี้ — เป็น list ของ domain ทั้งหมดที่ cert ใบเดียวครอบคลุม. cert ใบเดียวอาจมี SAN เป็น:

DNS: www.example.com
DNS: mail.example.com
DNS: shop.example.com
DNS: *.api.example.com ← wildcard

ในปี 2017 ขึ้นไป — Chrome เลิกใช้ CN ในการ verify domain แล้ว — ใช้แค่ SAN เท่านั้น. ถ้า cert ของบริษัทคุณมีแต่ CN ไม่มี SAN → Chrome จะแสดง warning

มุมผู้บริหาร: ขอทีม IT รัน openssl s_client -connect domain.com:443 -showcerts กับเว็บบริษัทคุณ — 30 วินาทีรู้ทันทีว่า cert ของ Subject ตรงกับชื่อบริษัทจริงไหม + Issuer เป็น CA ที่ตั้งใจใช้ไหม + Validity เหลือกี่วัน. ถ้า Subject เป็น “Default Company Ltd” หรือ Issuer เป็น CA ที่ไม่รู้จัก — ตั้ง config ผิดและอาจถูก hijack

Lifecycle — ออกบัตร, ต่ออายุ, ยกเลิก#

ทีนี้มาดู วงจรชีวิต ของ cert กันครับ. เหมือนบัตรประชาชนจริงๆ ที่มีวันเกิด — มีวันต่ออายุ — และมีโอกาสโดน “ยกเลิก” (เช่นบัตรหาย — แจ้งยกเลิกที่อำเภอ)

วงจรของ cert มี 4 ขั้นหลัก:

ขั้นที่ 1 — Generate Key Pair + CSR#

ก่อนได้บัตร — บริษัท / เว็บไซต์ต้องทำ 2 อย่าง:

  1. Generate key pair ในเครื่อง — ได้ public key + private key คู่หนึ่ง (RSA / ECC ตาม EP.21)
  2. สร้าง CSR (Certificate Signing Request) — ไฟล์ที่บรรจุ:
    • public key ที่เพิ่ง generate
    • Subject (ชื่อบริษัท / domain ที่จะใช้)
    • SAN (domain เพิ่มเติม)
    • sign ด้วย private key ของตัวเอง (เพื่อพิสูจน์ว่ามี private key คู่กับ public key นี้จริง)

Private key ห้ามออกจากเครื่อง — ห้ามส่งให้ CA. ถ้าส่งให้ใคร = หมดความหมายของ asymmetric crypto. CSR แนบเฉพาะ public key

ขั้นที่ 2 — Domain Validation + Issue#

บริษัทส่ง CSR ให้ CA. CA ต้อง verify ว่าผู้ขอ “ครอบครอง” domain นั้นจริง ก่อนออก cert ให้. มี 3 method หลัก:

  • DV (Domain Validation) — ง่ายและถูกที่สุด. CA ขอให้บริษัทพิสูจน์ความเป็นเจ้าของ domain โดย:
    • HTTP file — วางไฟล์ที่ CA กำหนดใน path เฉพาะ (เช่น /.well-known/acme-challenge/xxx)
    • DNS record — เพิ่ม TXT record ที่ CA กำหนดใน DNS
    • Email — ส่ง verification email ไป [email protected]
  • OV (Organization Validation) — CA verify เพิ่ม — ว่าบริษัทมีอยู่จริง — โทรหา registered phone — ตรวจ business registration
  • EV (Extended Validation) — verify ลึกที่สุด — ตรวจกฎหมายของบริษัท + ผู้บริหาร + ที่ตั้ง. ในยุคก่อน — browser เคยโชว์ชื่อบริษัทเป็นแถบเขียวที่ address bar. แต่ตั้งแต่ปี 2019 — Chrome / Firefox ยกเลิกการโชว์ green bar ของ EV แล้ว เพราะงานวิจัยพบว่าผู้ใช้ไม่ได้ดูอยู่ดี

verify ผ่าน — CA ใช้ private key ของ Intermediate sign cert → ส่ง cert กลับให้บริษัท

ขั้นที่ 3 — Install + Use#

บริษัท install cert บน web server (Nginx / Apache / IIS / Cloudflare). server ต้องมี 2 ไฟล์:

  • certificate file (รวม leaf cert + intermediate cert) — ส่งให้ browser
  • private key file — เก็บในเครื่อง — ห้าม commit เข้า git — ห้ามวางใน path ที่ download ได้

private key ของ web server หลุดเข้า GitHub public repo เป็น pattern ที่เห็นได้บ่อยมากในวงการ. ทุก search engine มี crawler ที่หา BEGIN PRIVATE KEY ใน public repo — และหลายเคสในข่าวคือ private key ของ production web หลุดเพราะ developer commit ไฟล์เข้า git โดยลืม .gitignore

ขั้นที่ 4 — Renew หรือ Revoke#

cert ใกล้หมดอายุ → ต้อง renew ก่อนวันหมด. process เหมือนตอนออกครั้งแรก — generate CSR ใหม่ → submit → install ใหม่

ในยุคปัจจุบัน — automation คือคำตอบเดียว. Let’s Encrypt + ACME protocol ทำให้ renew ได้อัตโนมัติทุก 60 วัน. AWS / Azure / GCP มี Certificate Manager service ที่ renew ให้เอง. ถ้าบริษัทคุณยัง renew ด้วยมือ — เตรียมตัวเจอ outage วันที่คนคีย์งานนี้ลาออก

อีกกรณี — ถ้า private key หลุด หรือ server ถูก compromise → ต้อง revoke cert ทันที (ยังไม่หมดอายุก็ revoke ได้). กลไก revocation = หัวข้อถัดไป

มุมผู้บริหาร: Cert lifecycle = supply chain ของความเชื่อ ถ้าบริษัทคุณยังจัดการ cert ด้วย Excel + reminder ใน Outlook = ระเบิดเวลาที่รอจุด action item: ลงทุน automation วันนี้ pattern ของวงการคลาสสิค — บริษัทใหญ่ระดับ Fortune 500 เกิด outage หลายชั่วโมงเพราะลืม renew cert ของ API gateway Cisco / Microsoft Azure / LinkedIn / Stripe / Spotify ทั้งหมดเคยมี outage ใหญ่จากเหตุนี้ cost ของ automation < cost ของ outage 1 ชั่วโมง เสมอครับ

Revocation — CRL, OCSP, OCSP Stapling#

ทีนี้มาดูเรื่องที่ subtle ที่สุดของ PKI ครับ — revocation. คือกลไกที่ตอบคำถาม: “ถ้า cert โดน compromise ก่อนหมดอายุ — ทำยังไงให้ browser ทั้งโลกรู้ว่าใบนี้ใช้ไม่ได้แล้ว?”

เปรียบกับโลกจริง — บัตรประชาชนหาย → ไปแจ้งความที่อำเภอ → กรมการปกครองมี database ว่าบัตรเลขนี้ “ถูกยกเลิก”. ถ้ามีคนพยายามใช้บัตรนี้ — เจ้าหน้าที่สามารถเช็คได้

ในโลกดิจิทัล — ปัญหาคือ browser ของคุณจะรู้ได้ยังไงว่า cert ใบหนึ่งถูก revoke? ลองดูวิวัฒนาการของวงการครับ

CRL (Certificate Revocation List) — รุ่นแรก ที่ตายไปแล้ว#

CRL = list ทั้งหมดของ cert ที่ถูก revoke — published โดย CA. ทุกครั้งที่ browser ต้องเช็ค cert — ก็ download CRL จาก CA → ค้นหาดูว่า cert ปัจจุบันอยู่ใน list ไหม

ฟังดูตรงไปตรงมา — แต่มี 2 ปัญหาใหญ่ที่ทำให้ตายในทางปฏิบัติ:

ปัญหาที่ 1: CRL ใหญ่มาก

CA ใหญ่ๆ ออก cert หลายล้านใบต่อปี. CRL ที่ active อาจมีขนาด หลาย MB. ทุกครั้งที่ browser เปิดเว็บใหม่ → download หลาย MB → ช้า

ปัญหาที่ 2: CRL ไม่ realtime

CA publish CRL ทุก 24 ชั่วโมง — บางที 7 วัน. ในระหว่างนั้น cert ที่เพิ่ง revoke = ยังถือว่า valid ใน browser ของผู้ใช้

ผลคือ — browser ส่วนใหญ่ตั้งแต่ปี 2012 เป็นต้นมา ไม่ download CRL อีกแล้ว. Chrome ตัดเลย. Firefox ใช้ replacement ที่เรียกว่า CRLite (CRL ที่ compress ด้วย bloom filter)

ข้างใน CRL มีอะไร — fields ที่ exam CISA / Security+ ชอบถาม#

ถ้าเปิดไฟล์ CRL ดูจริงๆ จะเห็น field หลักๆ ดังนี้ครับ มาตรฐานในวงการเรียก format นี้ว่า X.509 CRL v2:

  • Issuer name — ชื่อของ CA ที่ออก CRL ใบนี้ (เช่น “DigiCert SHA2 Secure Server CA”)
  • This Update — วันที่ออก CRL ใบนี้
  • Next Update — วันที่ CRL ใบนี้จะถูก republish (browser ใช้ field นี้รู้ว่า CRL ใบนี้สดอยู่ไหม)
  • Revoked Certificate List — list ของ cert ที่ถูก revoke แต่ละ entry ประกอบด้วย:
    • Serial Number ของ cert ที่ถูก revoke
    • Revocation Date วันที่ถูก revoke
    • Reason Code เหตุผลของการ revoke (จาก reason code ที่จะพูดถัดไป)
  • CA Signature — CA sign ทั้ง CRL ด้วย private key ของตัวเอง เพื่อไม่ให้ใครแก้ไฟล์ระหว่างทาง
  • Extension fields — เช่น CRL Number (ลำดับ version ของ CRL เพื่อเช็คว่าได้ใบล่าสุด), Delta CRL Indicator (CRL ที่บอกแค่ “ที่เปลี่ยนตั้งแต่ครั้งก่อน” ขนาดเล็กกว่า full CRL)

จุดที่ exam ชอบกับดักคือ Next Update ≠ Cert Expiration Next Update คือ “CRL ใบนี้ใช้ได้ถึงเมื่อไหร่” ไม่ใช่ “cert จะหมดอายุเมื่อไหร่” ถ้า browser เจอ CRL ที่ Next Update ผ่านไปแล้ว → ต้องไป download ใบใหม่

6 Reason Codes ที่ CA ใช้บอกว่าทำไม revoke (RFC 5280)#

ทุกครั้งที่ CA revoke cert ใบหนึ่ง ต้องระบุ reason code หนึ่งใน 6 หลักครับ ทั้ง CRL และ OCSP ส่ง reason code นี้กลับให้ browser exam ของ CISA / Security+ ออกเรื่องนี้บ่อย เพราะแต่ละ reason สื่อ severity ที่ต่างกัน:

Reason CodeคำอธิบายScenario ที่เจอบ่อย
Affiliation ChangedSubject ของ cert เปลี่ยน organization / สังกัดพนักงานลาออก — cert ของบริษัทเดิมต้อง revoke
Key Compromiseprivate key หลุดหรือสงสัยว่าหลุดserver โดน breach, key file หลุดเข้า GitHub
CA Compromiseprivate key ของ CA เอง ถูก compromiseเคส DigiNotar — catastrophic ที่สุด
Cessation of OperationSubject เลิกใช้ key / ระบบ / servicedecommission server เก่า, sunset service
Privilege WithdrawnSubject ถูกถอนสิทธิ์การใช้ certcontractor จบสัญญา, account ถูก suspend
Supersededออก cert ใหม่ทดแทน (เปลี่ยน algorithm / key size)migrate RSA 2048 → 4096, SHA-1 → SHA-256

จุดที่สำคัญในมุมปฏิบัติคือ Key Compromise ≠ Superseded ถ้าบริษัทคุณ rotate key เป็น routine (ไม่มี breach) → ใช้ Superseded ถ้ารู้ว่า key หลุดจริง → ใช้ Key Compromise การเลือก reason ผิดมีผลต่อ incident response เพราะทีม security ของลูกค้าอ่าน reason code นี้แล้วตัดสินใจว่าจะ block traffic เก่าทันทีหรือไม่

OCSP (Online Certificate Status Protocol) — รุ่นที่ 2#

OCSP เปลี่ยน approach — แทนที่จะ download list ทั้งหมด → ถาม CA ทีละใบ. browser ส่ง OCSP request ไปที่ OCSP responder ของ CA — ถามว่า “cert serial number XYZ ยังใช้ได้ไหม?”. CA ตอบ “Good” / “Revoked” / “Unknown”

ปัญหาของ OCSP มี 3 ข้อ:

ปัญหาที่ 1: Performance

ทุกครั้งที่ browser เปิดเว็บใหม่ → ต้อง round-trip ไปหา CA ก่อน. ถ้า CA server ของ Verisign / DigiCert ช้า → ผู้ใช้ทั่วโลกที่เปิดเว็บใช้ cert ของ Verisign โหลดช้าตาม

ปัญหาที่ 2: Privacy

CA เห็นทุกเว็บที่ user เปิด. ถ้า browser ถาม “cert ของ gmail.com ใช้ได้ไหม” → CA รู้ว่า user คนนี้กำลังเข้า Gmail. นี่คือ privacy leak ระดับโลก

ปัญหาที่ 3: Soft-fail

ถ้า OCSP responder ของ CA ล่ม → browser ถือว่า cert ใช้ได้ (soft-fail) เพราะถ้า hard-fail = ผู้ใช้เปิดเว็บไม่ได้เลย. โจรรู้จุดนี้ — ถ้าโจร DDoS OCSP responder ของ CA → browser จะ soft-fail → cert ที่ revoke ไปแล้วก็ใช้ต่อได้

OCSP Stapling — ปัจจุบัน best practice#

วงการแก้ปัญหาด้วย OCSP Stapling — server เป็นคนถาม OCSP แทน browser

flow ใหม่:

  1. server ของ Google เป็นคนถาม OCSP ของ CA เอง — เช่นทุก 1 ชั่วโมง — ได้ OCSP response มาเก็บไว้
  2. ตอน user เปิด mail.google.com — server ส่ง cert + OCSP response ที่ stapled มาด้วย ใน TLS handshake เดียวกัน
  3. browser ไม่ต้องถาม CA — เช็ค OCSP response ที่ server แนบมา → เร็วกว่าเดิม

ข้อดี:

  • เร็ว — ไม่มี round-trip เพิ่ม
  • privacy — CA ไม่รู้ว่า user คนไหนเปิดเว็บไหน
  • ไม่มีปัญหา DDoS ของ OCSP responder

ในปี 2026 — OCSP Stapling คือ best practice ที่ทุก web server แนะนำ. Nginx / Apache / Cloudflare ทั้งหมดมี option เปิด stapling

CRL Sets ของ Google + OneCRL ของ Mozilla — Hybrid approach#

ในความเป็นจริง — browser ไม่พึ่ง OCSP / CRL อย่างเดียว. Google + Mozilla มี approach ของตัวเอง:

  • CRLSets ของ Google — Google รวบรวม cert ที่ revoked + ที่ “สำคัญพอจะ block” — push เป็น list ไปยัง Chrome ทุกเครื่อง 6-12 ชั่วโมง
  • OneCRL ของ Mozilla — list ของ Intermediate CA ที่ Mozilla ตัดสินใจ revoke — push ไปยัง Firefox ทุกเครื่อง

ทั้ง 2 approach คือ “เราไม่เชื่อ OCSP / CRL — เราจัดการเอง สำหรับ cert ที่ critical พอ”

มุมผู้บริหาร: Revocation = จุดที่ PKI อ่อนแอที่สุด ในวงการ. ถ้าบริษัทคุณ deploy web server เอง — เปิด OCSP Stapling ทันที. ตรวจ config nginx / apache → ขอ option ssl_stapling on + ssl_stapling_verify on. ใช้เวลา 5 นาทีของ DevOps. ในมุม risk — ถ้า private key ของบริษัทคุณหลุด + revoke แล้ว → ถ้า browser ของลูกค้าไม่เช็ค revocation = โจรยังใช้ key ที่หลุดได้ต่ออีกนาน. soft-fail behavior ของ browser ทำให้ revoke ในทางปฏิบัติ “ไม่ค่อยมีผล” — ทางแก้คือ short-lived cert (cert อายุสั้น = ไม่ต้องพึ่ง revocation)

Certificate Transparency + DigiNotar — เคสที่เปลี่ยนทั้งวงการ#

มาถึงหัวข้อสุดท้ายที่ตื่นเต้นที่สุดของ EP นี้ครับ ผมจะเล่าเคสจริงที่เปลี่ยนวงการ PKI ทั้งโลกใน 3 สัปดาห์

DigiNotar 2011 — ราชวงศ์ของฮอลแลนด์ที่ถูกปลอม#

DigiNotar เป็น CA ดัตช์ ที่ออก cert ให้รัฐบาลฮอลแลนด์ — เป็น trusted Root CA ในทุก browser ทั่วโลก. รัฐบาลฮอลแลนด์ใช้ DigiNotar ออก cert ของระบบ tax / health / e-government

ปลายเดือนสิงหาคม 2011 — มีคนใช้ Gmail ในอิหร่าน รายงานว่า Chrome แสดง warning แปลกๆ. ทีม Google เข้าไปดู — พบเรื่องที่ทำให้ทุกคนตกใจ

มีคนใช้ private key ของ DigiNotar Intermediate CA — ออก cert ปลอมของ google.com

มี cert ปลอม ของ:

  • *.google.com
  • *.microsoft.com
  • *.skype.com
  • *.twitter.com
  • *.wordpress.com
  • *.facebook.com
  • addons.mozilla.org
  • หน่วยข่าวกรองสหรัฐ + อังกฤษ + อิสราเอล

รวม 531 cert ปลอม ที่ออกได้สำเร็จ (รายงานสุดท้ายปรับเป็น 700+ cert) — มีคนเอาไปใช้ทำ MITM กับผู้ใช้ Gmail ในอิหร่าน — ประมาณว่ามีผู้ใช้ที่ถูก MITM 300,000 คน

หลักฐานชี้ไปที่ รัฐบาลอิหร่าน หรือกลุ่มที่ใกล้ชิด — ใช้เพื่อจับนักเคลื่อนไหวที่ใช้ Gmail สื่อสารช่วง Arab Spring

ทำไมไม่มีใครรู้ก่อน 2 เดือน?#

จุดที่ทำให้วงการตกใจที่สุดคือ — DigiNotar ถูก breach ตั้งแต่ 17 มิถุนายน 2011 — แต่กว่าจะถูกเปิดโปง 29 สิงหาคม 2011 — ผ่านไป 2 เดือนกว่า ที่ cert ปลอมถูกใช้ในอิหร่าน

DigiNotar รู้ตัวว่าโดน hack ตั้งแต่ปลายเดือน 6 — แต่ไม่บอกใคร. รอจนกระทั่งผู้ใช้ Gmail ใน Iran เป็นคน whistleblow

ผลลัพธ์ใน 3 สัปดาห์#

  • 30 สิงหาคม: Google + Mozilla + Microsoft + Apple distrust DigiNotar Root พร้อมกัน
  • 3 กันยายน: รัฐบาลฮอลแลนด์ยึด DigiNotar
  • 20 กันยายน: DigiNotar ยื่นล้มละลาย

บริษัทตายภายใน 3 สัปดาห์ หลังเรื่องแดง. นี่คือ blueprint ของวงการว่า — trust ของ CA = สินทรัพย์ที่หายในวันเดียว

ที่ DigiNotar ทิ้งไว้ — Certificate Transparency#

เคส DigiNotar ทำให้ Google + Mozilla ตระหนักว่า — ระบบ PKI ของวงการ “blind”. ไม่มีใครรู้ว่า CA ไหน “กำลังออก cert อะไรอยู่”. CA ออก cert ปลอมได้โดยไม่มีใครเห็น

วิธีแก้ที่ Google คิดในปี 2013 — Certificate Transparency (CT) — log สาธารณะของ cert ทุกใบที่ CA ออก

หลักการของ CT:

  1. CA ทุกใบที่จะออก cert ต้อง submit cert เข้า public CT log ก่อน
  2. CT log = append-only log ที่ใช้ Merkle tree (EP.22) — ใครก็ลบของในล้อกไม่ได้
  3. CT log run โดย Google / Cloudflare / Let’s Encrypt / DigiCert — กระจายอยู่หลายเจ้า
  4. browser (Chrome ตั้งแต่ปี 2018) บังคับว่า — cert ที่ไม่อยู่ใน CT log ≥ 2 ที่ → ปฏิเสธ
  5. monitor = บริษัทใหญ่อย่าง Google / Facebook สามารถ scan CT log เพื่อหา cert ปลอมของ domain ตัวเอง

ผลคือ — ถ้ามีคนพยายามทำซ้ำเคส DigiNotar ในวันนี้ — Google จะเห็น cert ปลอมของ google.com ใน CT log ภายในชั่วโมง — ไม่ต้องรอ 2 เดือน

CT คือ — “sunlight is the best disinfectant” ในวงการ PKI

Symantec distrust 2018 — เคสที่ใหญ่ที่สุดในวงการหลัง DigiNotar#

ปี 2017-2018 — Google + Mozilla distrust Symantec CA (รวมถึง Thawte / GeoTrust / RapidSSL ที่ Symantec ถือ) หลังจากเจอ Symantec ออก cert ปลอม / misissue 30,000+ cert ในช่วงหลายปี

ผลคือ — 30%+ ของ cert ทั้ง internet ต้องถูก re-issue. DigiCert ซื้อกิจการ Symantec CA แล้วต้อง re-validate ทุก cert ใหม่. นี่คือ cert ที่หมดอายุ + re-issue ใหญ่ที่สุดในประวัติศาสตร์ internet

ข้อเรียนรู้ — ขนาดของ CA ไม่ได้ป้องกัน distrust ได้. Symantec ในปี 2017 คือ CA ที่ใหญ่ที่สุดในวงการ — และก็ตกในเวลา 1 ปีกว่า

Let’s Encrypt 3M revoke ปี 2020 — เคสที่ดีที่สุดของ “หลังบ้านเก่ง”#

มีนาคม 2020 — Let’s Encrypt พบ bug ใน CAA check (Certificate Authority Authorization — DNS record ที่บอกว่า “เฉพาะ CA ตัวนี้ที่ออก cert ให้ domain นี้ได้”) — bug ทำให้ check ของ Let’s Encrypt ผิดสำหรับ 3 ล้านกว่า cert

Let’s Encrypt ประกาศจะ revoke 3+ ล้าน cert ภายใน 24 ชั่วโมง ตาม industry rule. คนทั้งวงการตกใจ — แต่ในที่สุด Let’s Encrypt ลด scope ลงเหลือ ~1.7 ล้าน cert (ที่ยัง active) — และเปิดเครื่องมือให้ลูกค้า re-issue ได้อัตโนมัติผ่าน ACME

ผลคือ — ไม่มี outage ใหญ่. ลูกค้าส่วนใหญ่มี automation อยู่แล้ว — renew ใหม่ใน 24 ชั่วโมง — เรื่องจบ

เคสนี้ตรงข้ามกับ DigiNotar — ทำพลาด + transparent + แก้เร็ว = trust กลับมาภายในสัปดาห์

มุมผู้บริหาร: ทีม security ของบริษัทคุณควรมี CT monitoring ของ domain บริษัทเป็น routine ใช้ tool ฟรีอย่าง crt.sh หรือ Facebook CT Monitor alert ทุกครั้งที่มีคนออก cert ของ *.yourcompany.com ที่ไม่ใช่จากทีม IT pattern ของวงการ — บริษัทใหญ่หลายแห่งพบ cert ปลอมของ subdomain ตัวเองในล้อก CT ก่อน phishing campaign เริ่ม และบล็อกเว็บปลอมได้ก่อนลูกค้าตกเป็นเหยื่อ นี่คือ control ที่ราคา 0 บาท + ROI ระดับวงการ

11 ความเสี่ยง PKI ที่ enterprise เจอบ่อย#

มาถึงตอนเช็คลิสต์ครับ ถ้าบริษัทคุณ deploy PKI เอง หรือใช้ CA ภายนอกในระดับ enterprise ต่อไปนี้คือ 11 ความเสี่ยงคลาสสิค ที่ ISACA / NIST / industry audit ออกเตือนซ้ำๆ list ให้ดูเป็นภาพรวมว่าจุดไหนต้องเช็ค:

#Riskทำไมเป็นปัญหา
1Weak cryptographic keysRSA < 2048-bit / ECC < 256-bit = crack ได้ในเวลาที่สั้นลงเรื่อยๆ ตาม Moore’s law + quantum threat
2Mismanaged certificatesลืม renew → expired cert ใน production → outage / browser warning
3Lack of automationrenew ด้วยมือ → human error → ลืม / คีย์ผิด / cert หาย ตอนคนคีย์งานลาออก
4Talent gapPKI engineer หาคนยาก specialist ในวงการ. บริษัทส่วนใหญ่มีคนเข้าใจ PKI ลึกแค่ 1-2 คน — bus factor ต่ำ
5Certificate visibilityไม่รู้ว่าบริษัทมี cert ทั้งหมดกี่ใบ + ที่ไหน — shadow certs ที่ทีม dev ออกเองโดยไม่ผ่าน IT
6Private key managementเก็บ key ใน plaintext, share ระหว่าง team, commit เข้า git — ทำลายทั้ง model asymmetric
7Patch managementsoftware ของ CA / RA มี vulnerability — ถ้าไม่ patch → โจรเข้าได้
8Insufficient HSMprivate key ของ CA / sensitive cert เก็บใน software แทน HSM → ถ้า OS โดน compromise = key หลุดทันที
9Weak CP/CPSCertificate Policy + Certification Practice Statement ไม่ครบ / ไม่ตรวจ → operation ผิดเกณฑ์โดยไม่มีคนรู้
10Poor cross-certificationบริษัทไป trust CA ของพาร์ทเนอร์ที่ไม่ vet → trust แพร่ผิดทาง
11Inadequate audit + monitoringCA log ไม่ ship ไป SIEM → ออก cert ผิดได้นานก่อนถูกตรวจพบ (เคส DigiNotar = ตัวอย่างคลาสสิค)

จุดที่อยากเน้น 3 จุดในมุมผู้บริหาร:

  • Visibility (#5) เป็นจุดที่บริษัทไทยพลาดบ่อยที่สุดครับ ทีม dev หลายทีมออก cert ของตัวเองจาก Let’s Encrypt โดยไม่บอก IT → วันที่ cert หมดอายุ ทีม IT ไม่รู้ว่ามี cert ใบนี้อยู่
  • HSM (#8) ถ้าบริษัทขนาดกลางขึ้นไปและตั้ง internal CA → คุ้มทุกบาท ที่จะลงทุน HSM (Thales / Yubico / cloud HSM ใน AWS / Azure) ราคา HSM < cost ของ key compromise 1 ครั้ง
  • Audit log → SIEM (#11) = control ที่ทำได้ทันทีและฟรี ถ้ามี SIEM อยู่แล้ว เพิ่ม log source ใหม่อีก 1 ตัว

PKI Audit — 7 ส่วนที่ผู้ตรวจสอบมอง#

ถ้าบริษัทคุณต้องโดน audit ระบบ PKI (เพื่อ ISO 27001 / SOC 2 / PCI DSS / WebTrust for CA) ผู้ตรวจสอบจะดู 7 ส่วน ตามมาตรฐานของวงการ รู้ไว้ก่อนจะช่วยให้เตรียมตัวได้

1. CA Review#

ตรวจ physical security ของ CA คือ ห้องที่เก็บ HSM, biometric, CCTV, dual control เวลา access ตรวจ log การใช้ private key ของ CA ว่าทุกครั้งที่ sign Intermediate ต้องมี log + ลายเซ็น 2 คน

2. RA Review#

ตรวจ process ของ identity verification — RA verify ผู้ขอ cert ยังไง, มี separation of duties จาก CA ไหม, ใครมีสิทธิ์ approve cert request

3. Certificate Policy (CP) Review#

CP = “ใคร trust อะไร และทำไม” เป็นเอกสารระดับ policy ที่บอก stakeholder ว่า CA นี้ใช้สำหรับ use case อะไร, ระดับ assurance เท่าไหร่, ใครเป็น relying party

CP เป็นเอกสารสั้น ปกติ 1-2 หน้า เป็น commitment ระดับสูง

4. Certification Practice Statement (CPS) Review#

CPS = “CA ทำงานตาม CP ยังไง” เอกสาร operational manual ที่บอก how ละเอียดทุกขั้น

CPS เป็นเอกสารยาว ปกติ 50+ หน้า ครอบคลุม key generation, key storage, identity verification procedure, cert issuance procedure, revocation procedure, audit procedure

กับดักของ exam — แยก CP กับ CPS ให้ออก:

  • CP = what (high-level policy)
  • CPS = how (detailed operational practice)

ถ้า exam ถาม “เอกสารไหนระบุว่า CA จะ verify identity แบบ DV / OV / EV” = CPS (เพราะมัน how) ถ้า exam ถาม “เอกสารไหนระบุว่า CA ใบนี้ใช้สำหรับ banking grade transactions เท่านั้น” = CP (เพราะมัน policy / scope)

5. CRL + OCSP Review#

ตรวจ distribution + freshness ว่า CRL update ตามตาราง Next Update ไหม, OCSP responder up ทั้ง 24/7 ไหม, latency เท่าไหร่

6. Key Management Review#

ตรวจ lifecycle ของ key:

  • Key Generation — generate ใน HSM ไหม, ใช้ random source ที่เชื่อได้ไหม
  • Key Escrow — ถ้ามี backup ของ private key (สำหรับ recover) เก็บที่ไหน, ใครเข้าถึงได้, ตาม dual control ไหม
  • Key Recovery — process ที่ recover key ของพนักงานที่ลาออก (สำหรับ encrypt email เก่า) เป็นยังไง
  • Key Destruction — เมื่อ key หมดอายุ destroy ยังไง, มี certificate of destruction ไหม

7. Compliance Review#

ตรวจว่า CA + HSM compliant ตาม:

  • FIPS 140-2 หรือ FIPS 140-3 (มาตรฐาน US ของ cryptographic module — Level 1-4)
  • PCI DSS ถ้า CA ใช้ในระบบ payment
  • WebTrust for Certification Authorities ถ้าเป็น public CA ที่ต้องการอยู่ใน browser trust store
  • ETSI EN 319 411 (มาตรฐาน EU เทียบเท่า WebTrust)

มุมผู้บริหาร: ถ้าบริษัทคุณตั้ง internal CA เขียน CP + CPS ตั้งแต่วันแรกครับ หลายบริษัทตั้ง CA ก่อนแล้วค่อยเขียน policy ทีหลัง ผลคือ CA run ไป 2 ปีโดยไม่มีเอกสารว่าทำอะไรอยู่ template ฟรี ของ NIST / Mozilla / Let’s Encrypt มีให้ download adapt มาใช้ได้เลย ตัวเลขใน scope ของ CP / CPS ที่ระบุชัด = ผ่าน audit ได้ครึ่งทาง แล้ว

สรุป — ราชวงศ์, ขุนนาง, บัตร — ระบบความเชื่อของอินเทอร์เน็ตทั้งโลก#

ครับ EP.23 จบ. ลองทบทวนสิ่งที่ผ่านมาในมุม “เมืองที่ของมีค่า” ที่เราเดินอยู่ใน Part 3:

ใน EP.21 เราเห็น กุญแจ 2 ดอก ของ asymmetric crypto. แต่ปัญหาคือ — public key ดอกแรกที่คุณเห็น = เชื่อได้ยังไง? คำตอบของวงการคือ PKI — ระบบ ราชวงศ์ → ขุนนาง → บัตรประชาชน ที่ใช้กันทั้งอินเทอร์เน็ต

ราชวงศ์ = Root CA ที่ทุก browser เชื่อมาตั้งแต่วันแรกที่ install. ราชวงศ์ไม่ออกบัตรเอง — แต่งตั้ง ขุนนาง (Intermediate CA). ขุนนางออกบัตรประชาชน (leaf cert) ให้แต่ละเว็บ. ในบัตรมี Subject + Issuer + Validity + Public Key + Signature + SAN — เหมือนบัตรประชาชนจริง

ระบบนี้ไม่ได้สมบูรณ์แบบ. กลไก revoke (CRL → OCSP → OCSP Stapling) ยังเป็นจุดอ่อน. soft-fail behavior ของ browser ทำให้ revoke ในทางปฏิบัติไม่ค่อยมีผล — ทางออกของวงการคือ short-lived cert (อายุ 13 เดือน → 47 วันในอนาคต)

และที่สำคัญที่สุด — เคส DigiNotar 2011 สอนวงการว่า “CA ที่เชื่อได้ในวันนี้ อาจตายใน 3 สัปดาห์”. ผลลัพธ์คือ Certificate Transparency — log สาธารณะที่ทำให้ “sunlight is the best disinfectant” — ใครก็เห็นว่า CA ไหนกำลังออก cert อะไรอยู่

สิ่งที่ผู้นำต้องจำ#

ข้อแรก — PKI = supply chain ของความเชื่อ. บริษัทคุณพึ่งคนอื่นโดยไม่รู้ตัว

ลองนึกภาพ — บริษัทคุณ secure ระดับโลก. ทีม IT เก่ง. firewall แพง. MFA ครบ. แต่ทุกครั้งที่พนักงานเปิด Salesforce / Office 365 / Gmail — browser ตัดสินใจอัตโนมัติว่าเชื่อเว็บนั้น เพราะ CA ที่บริษัทคุณไม่ได้เลือก vouch ให้

ถ้า CA หนึ่งใน trust store ของ browser พนักงาน — โดน compromise — โจรสามารถออก cert ปลอมของ Salesforce → พนักงาน login เข้าเว็บปลอม → password หลุด. ไม่มีอะไรในระบบของบริษัทคุณจับได้

ทางป้องกัน 3 ข้อในมุมผู้บริหาร:

  1. CT monitoring — alert ทุกครั้งที่ใครออก cert ของ domain บริษัท. ใช้ครับ ฟรี
  2. HSTS + HPKP/Expect-CT — บังคับ browser ของลูกค้าให้ใช้แค่ HTTPS + cert ที่บริษัทตั้งใจ (EP.24 จะลงลึก)
  3. internal CA — ถ้าบริษัทตั้ง CA เอง — Root ต้อง offline + เก็บใน HSM + audit log ครบ. ห้ามมี Root online ในเครื่องที่ใช้งาน

ข้อสอง — Automate cert lifecycle วันนี้. ไม่งั้นจะมี outage

นี่คือ pattern ของวงการคลาสสิคที่ขึ้นข่าวซ้ำซากของบริษัทระดับโลก — บริษัทใหญ่ outage หลายชั่วโมงเพราะลืม renew cert. LinkedIn ครั้งหนึ่ง. Microsoft Teams ครั้งหนึ่ง. Cisco WebEx หลายครั้ง. Spotify หลายครั้ง. ทุกคนพลาดได้ — ถ้ายัง renew ด้วยมือ

3 step ที่ทำได้ทันที:

  • inventory cert ทุกใบ ของบริษัท. ใช้ tool อย่าง Cert Spotter หรือ scan port 443 ของ subnet
  • set up monitoring + alerting — alert 60 / 30 / 14 / 7 วัน ก่อนหมดอายุ
  • ทำ automation — Let’s Encrypt + ACME ฟรี. AWS Certificate Manager / Azure Key Vault สำหรับ cloud workload — มี auto-renew

ถ้าบริษัทคุณยังจัดการ cert ด้วย spreadsheet + Outlook reminder ในปี 2026 — เปลี่ยนเป็น automation ทันที. cost ของ tool < cost ของ outage 1 ชั่วโมงเสมอ

Tease EP.24 — TLS / HTTPS: ตู้ขนเงินหุ้มเกราะ#

Certificate + PKI พร้อมแล้ว. เอามาใช้กับเว็บไซต์ยังไง?

TLS / HTTPS — EP.24

EP.24 จะลงทั้ง TLS handshake (4 ขั้นที่ browser กับ server คุยกันใน 100 ms), TLS 1.2 vs 1.3, cipher suite, สิ่งที่ HTTPS ป้องกัน vs ไม่ป้องกัน, และเคสตำนานอย่าง Heartbleed / POODLE / BEAST / DROWN

หัวใจของ EP.24 — HTTPS = ตู้ขนเงินหุ้มเกราะระหว่างทาง — ไม่ได้ป้องกันคนปลายทาง. เว็บ phishing ที่มี cert ถูกต้อง = ตู้ขนเงินที่ขับไปร้านขายของโจร — ตู้ปลอดภัย แต่ปลายทางผิด

เจอกันที่ EP.24 ครับ