ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home ตั้งค่า CAA Record เพื่อกำหนดผู้ออก SSL Certificate

ตั้งค่า CAA Record เพื่อกำหนดผู้ออก SSL Certificate

CAA (Certification Authority Authorization) เป็น DNS Record ที่ประกาศว่า Certificate Authority (CA) รายใดบ้างได้รับอนุญาตให้ออก SSL Certificate ให้โดเมนของคุณ ก่อนออกใบรับรองทุกครั้ง CA ที่เป็นสมาชิก CA/Browser Forum มีหน้าที่ต้องตรวจ CAA Record ถ้ามี Record อยู่และไม่มีชื่อตัวเอง CA ต้องปฏิเสธการออกใบ

ประโยชน์คือ ถ้าวันหนึ่งมีคนพยายามออกใบรับรองของโดเมนคุณกับ CA อื่นที่คุณไม่ได้ใช้ ระบบจะไม่ยอมออกให้ ข้อควรระวังคือถ้าตั้งผิด ใบรับรองของคุณเองจะต่ออายุไม่ผ่านด้วย บทความนี้จึงเน้นการสำรวจก่อนตั้งค่า และการตรวจผลหลังตั้งค่า

สิ่งที่ต้องเตรียม

  • สิทธิ์แก้ไข 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ความหมาย
issueCA ที่อนุญาตให้ออกใบรับรองทั่วไป (และ Wildcard ถ้าไม่มี issuewild)
issuewildCA ที่อนุญาตให้ออกใบ 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
GlobalSignglobalsign.com
Google Trust Servicespki.goog
SSL.comssl.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 ต้องใส่ให้ครบเอง

ขั้นตอนที่ 3 (ทางเลือก): ผูกกับบัญชี ACME

Let's Encrypt รองรับพารามิเตอร์ accounturi และ validationmethods ตาม RFC 8657 เพื่อจำกัดให้ออกใบได้เฉพาะบัญชี ACME ของคุณเท่านั้น

example.com. 3600 IN CAA 0 issue "letsencrypt.org; accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/123456789"

ตัวเลขบัญชีดูได้จากไฟล์ในเครื่องที่รัน Certbot ใต้ /etc/letsencrypt/accounts/ วิธีนี้เหมาะกับผู้ที่ดูแลเซิร์ฟเวอร์เอง ถ้าใช้แผงควบคุมที่สร้างบัญชี ACME ใหม่เป็นครั้งคราว ไม่ควรใช้ เพราะการต่ออายุจะล้มเหลว

CAA ทำงานกับ Subdomain อย่างไร

CA จะหา CAA จากชื่อที่ขอใบก่อน ถ้าไม่พบจะไล่ขึ้นไประดับบน เช่น ขอใบ shop.example.com CA ดู shop.example.com ก่อน ไม่พบจึงดู example.com ดังนั้น CAA ที่ระดับโดเมนหลักมีผลกับทุก Subdomain ถ้า Subdomain ไหนใช้ CA ต่างออกไป ให้สร้าง CAA ที่ชื่อนั้นแยก ถ้า Subdomain เป็น CNAME ไปบริการภายนอก CA จะตาม CNAME ไปดู CAA ปลายทางด้วย

ตรวจสอบผลลัพธ์

dig example.com CAA +noall +answer
dig @8.8.8.8 example.com CAA +short

ต้องเห็นทุก Record ที่สร้าง เช่น 0 issue "letsencrypt.org" จากนั้นทดสอบการต่ออายุจริงแบบไม่ออกใบ เช่นบนเซิร์ฟเวอร์ที่ใช้ Certbot

sudo certbot renew --dry-run

ถ้าผ่าน จะเห็นข้อความ Congratulations, all simulated renewals succeeded

ปัญหาที่พบบ่อย

ออกใบไม่ผ่าน แจ้ง CAA record prevents issuance

ข้อความทำนองนี้จาก Let's Encrypt หมายถึง CAA ไม่ได้ระบุ letsencrypt.org ไว้ ให้เพิ่ม Record ที่ขาดหรือแก้การสะกด แล้วรอ TTL ก่อนลองใหม่ ระวังการใส่ค่าเป็นชื่อ URL เช่น https://letsencrypt.org ซึ่งผิด ต้องเป็นชื่อโดเมนเท่านั้น

ใบ Wildcard ออกไม่ได้ ทั้งที่ใบปกติออกได้

มี issuewild อยู่และไม่ได้ระบุ CA นั้น เมื่อมี issuewild CA จะไม่ดู issue สำหรับ Wildcard เลย ให้เพิ่ม CA ลงใน issuewild ด้วย

ใส่ issuewild ";" แล้ว Wildcard หยุดทำงาน

ค่า ";" คือการห้ามทุก CA ออก Wildcard ใช้เฉพาะเมื่อตั้งใจไม่ใช้ Wildcard เลย

สำหรับการเฝ้าวันหมดอายุหลังตั้ง CAA ดู ตรวจสอบวันหมดอายุ SSL Certificate

หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมงานซัพพอร์ตของ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ โดยแจ้งชื่อโดเมน สิ่งที่ทำไปแล้ว และข้อความ Error ที่พบ เพื่อให้ทีมงานตรวจสอบได้รวดเร็วขึ้น

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security