คำตอบสั้น ๆ: สร้าง CAA Record เพื่อกำหนดว่า Certificate Authority รายใดออก SSL ให้โดเมนของคุณได้ ลดความเสี่ยงใบรับรองปลอม และแก้ปัญหาออก SSL ไม่ผ่านเพราะ CAA
คู่มือนี้อธิบาย CAA Record ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
CAA (Certification Authority Authorization) เป็น DNS Record ที่ประกาศว่า Certificate Authority (CA) รายใดบ้างได้รับอนุญาตให้ออก SSL Certificate ให้โดเมนของคุณ ก่อนออกใบรับรองทุกครั้ง CA ที่เป็นสมาชิก CA/Browser Forum มีหน้าที่ต้องตรวจ CAA Record ถ้ามี Record อยู่และไม่มีชื่อตัวเอง CA ต้องปฏิเสธการออกใบ
ประโยชน์คือ ถ้าวันหนึ่งมีคนพยายามออกใบรับรองของโดเมนคุณกับ CA อื่นที่คุณไม่ได้ใช้ ระบบจะไม่ยอมออกให้ ข้อควรระวังคือถ้าตั้งผิด ใบรับรองของคุณเองจะต่ออายุไม่ผ่านด้วย บทความนี้จึงเน้นการสำรวจก่อนตั้งค่า และการตรวจผลหลังตั้งค่า
สิ่งที่ต้องเตรียม (CAA Record)
- สิทธิ์แก้ไข DNS Zone ของโดเมน ผู้ให้บริการ DNS ส่วนใหญ่รองรับ CAA แล้ว รวมถึง Cloudflare, Plesk Obsidian และ DirectAdmin รุ่นปัจจุบัน หากในรายการชนิด Record ไม่มี CAA ให้สอบถามผู้ดูแล DNS
- รายชื่อ CA ที่ออกใบรับรองให้ทุก Subdomain ในปัจจุบัน
- คำสั่ง
digสำหรับตรวจสอบ
โครงสร้างของ CAA Record
CAA Record หนึ่งตัวมี 3 ส่วน คือ Flag, Tag และ Value
example.com. 3600 IN CAA 0 issue "letsencrypt.org"
| Tag | ความหมาย |
|---|---|
issue | CA ที่อนุญาตให้ออกใบรับรองทั่วไป (และ Wildcard ถ้าไม่มี issuewild) |
issuewild | CA ที่อนุญาตให้ออกใบ Wildcard เช่น *.example.com ถ้ามี Tag นี้ จะใช้แทน issue สำหรับ Wildcard |
iodef | ที่อยู่ให้ CA แจ้งเตือนเมื่อมีคำขอที่ถูกปฏิเสธ เช่น "mailto:[email protected]" CA ไม่จำเป็นต้องรองรับทุกราย |
Flag ใช้ 0 เป็นปกติ ค่า 128 หมายถึง Critical ซึ่งไม่จำเป็นสำหรับการใช้งานทั่วไป
ค่า Value ของ CA ที่พบบ่อย
| CA หรือบริการ | ค่าที่ใส่ใน issue |
|---|---|
| Let's Encrypt (รวม SSL อัตโนมัติใน Plesk และ DirectAdmin) | letsencrypt.org |
| DigiCert (รวมแบรนด์ GeoTrust, Thawte, RapidSSL) | digicert.com |
| Sectigo (รวม ZeroSSL และใบที่ขายในชื่อ Comodo เดิม) | sectigo.com |
| GlobalSign | globalsign.com |
| Google Trust Services | pki.goog |
| SSL.com | ssl.com |
ค่าที่ถูกต้องที่สุดคือค่าที่ CA ระบุในเอกสารของตัวเอง หากซื้อใบรับรองผ่านตัวแทน ให้ถามว่าใบออกโดย CA ใดจริง ไม่ใช่ชื่อแบรนด์ที่ขาย
ขั้นตอนที่ 1: สำรวจว่าใช้ CA ใดอยู่บ้าง
ตรวจใบรับรองของแต่ละชื่อที่ใช้งานจริง ทั้งเว็บหลัก, www, mail และ Subdomain อื่น
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -issuer -enddate
ผลลัพธ์จะเป็นแบบนี้ ดูชื่อองค์กรในบรรทัด issuer
issuer=C = US, O = Let's Encrypt, CN = R11
notAfter=Dec 18 03:12:40 2026 GMT
ตรวจด้วยว่าโดเมนมี CAA อยู่แล้วหรือยัง
dig example.com CAA +short
ถ้าไม่มีผลลัพธ์ แปลว่ายังไม่มี CAA ซึ่งหมายถึงทุก CA ออกใบให้ได้
ขั้นตอนที่ 2: สร้าง CAA Record
ตัวอย่างสำหรับโดเมนที่ใช้ Let's Encrypt กับทุกชื่อ และซื้อใบ Wildcard จาก Sectigo
example.com. 3600 IN CAA 0 issue "letsencrypt.org"
example.com. 3600 IN CAA 0 issuewild "sectigo.com"
example.com. 3600 IN CAA 0 iodef "mailto:[email protected]"
ในหน้าจอจัดการ DNS ส่วนใหญ่จะแยกช่องให้กรอกดังนี้
- Cloudflare: DNS แล้วเลือก Records กด Add record เลือก Type เป็น CAA ช่อง Name ใส่
@เลือก Tag จากรายการ (เช่น Only allow specific hostnames สำหรับ issue และ Only allow wildcards สำหรับ issuewild) แล้วใส่ CA domain name - Plesk: Websites & Domains เลือกโดเมน แล้วเข้า Hosting & DNS และ DNS เพิ่ม Record ชนิด CAA ตำแหน่งเมนูอาจต่างตามเวอร์ชัน ดู แก้ไข DNS Record บน Plesk
- DirectAdmin: Account Manager แล้วเลือก DNS Management กด Add Record เลือกชนิด CAA ดู จัดการ DNS บน DirectAdmin
หมายเหตุ: ถ้าใช้ Cloudflare Proxy ใบรับรองฝั่ง Edge ของ Cloudflare อาจออกโดย Let's Encrypt, Google Trust Services หรือ SSL.com เมื่อคุณมี CAA Record อยู่ Cloudflare จะเพิ่ม CAA ของ CA ที่ตัวเองใช้ให้อัตโนมัติในคำตอบ DNS ถ้าบริหารด้วยตัวเองนอก Cloudflare ต้องใส่ให้ครบเอง