วัน: 11 พฤศจิกายน 2009

ขอ Let’s Encrypt SSL ผ่าน Certbot สำหรับโดเมนที่อยู่หลัง Cloudflare Proxy โดยไม่ต้องแก้การตั้งค่า Cloudflareขอ Let’s Encrypt SSL ผ่าน Certbot สำหรับโดเมนที่อยู่หลัง Cloudflare Proxy โดยไม่ต้องแก้การตั้งค่า Cloudflare

สำหรับผู้ดูแลระบบที่ใช้งาน Cloudflare เป็น Reverse Proxy (สัญลักษณ์ก้อนเมฆสีส้ม) การติดตั้งหรือต่ออายุใบรับรอง SSL/TLS ด้วย Certbot บน Origin Server มักเจอปัญหา ACME Challenge ล้มเหลว เนื่องจาก Cloudflare จะทำหน้าที่เป็นตัวกลางที่ขัดขวางการตรวจสอบพอร์ต 80 หรือเส้นทาง HTTP ปกติ

การแก้ไขปัญหาแบบเดิมๆ เช่น การปิด Proxy หรือการเปลี่ยนโหมด SSL ส่งผลกระทบต่อการทำงานของเว็บไซต์อย่างรุนแรง ในบทความนี้ เราจะนำเสนอแนวทางระดับ Senior Architect ที่เสถียรที่สุด นั่นคือการใช้ DNS-01 Challenge ซึ่งเป็นวิธีที่สามารถขอใบรับรอง SSL จาก Let’s Encrypt ได้อย่างสมบูรณ์แบบ โดยที่ยังคงรักษาการตั้งค่า Cloudflare Proxy ให้เป็นสถานะปกติ (Proxy On) ได้อย่างไม่มีปัญหา

💡 หลักการทำงานของ DNS-01 Challenge

หลักการของ DNS-01 คือการพิสูจน์ความเป็นเจ้าของโดเมนโดยการเพิ่มค่า TXT Record พิเศษลงใน DNS Zone ของโดเมนนั้นๆ แทนการพึ่งพาการเข้าถึงพอร์ต HTTP (Port 80) ซึ่งเป็นจุดที่ Cloudflare เข้ามาขัดขวาง

Certbot จะสื่อสารโดยตรงกับ Cloudflare API เพื่อเพิ่ม TXT Record ชั่วคราว จากนั้น Let’s Encrypt จะทำการตรวจสอบ DNS Record นั้น เมื่อผ่านการตรวจสอบแล้ว Certbot ก็จะสามารถออกใบรับรองให้ได้ทันที

⚙️ ขั้นตอนที่ 1: การเตรียม API Token บน Cloudflare

ก่อนอื่น คุณต้องสร้าง API Token ที่มีสิทธิ์ในการจัดการ DNS Record ของโดเมนนั้นๆ โดยมีสิทธิ์จำกัดเฉพาะการเพิ่ม/ลบ TXT Record เท่านั้น

เมื่อได้รับ Token แล้ว ข้อมูลนี้จะถูกนำไปใช้ในการรัน Certbot เพื่อให้ Certbot สามารถสั่งการแก้ไข DNS ได้อย่างปลอดภัย

🛠️ ขั้นตอนที่ 2: การรัน Certbot ด้วย DNS Plugin

เราจะใช้ Certbot ร่วมกับปลั๊กอินของ Cloudflare เพื่อให้กระบวนการทำงานเป็นไปอย่างอัตโนมัติ โดยการระบุ API Token และโดเมนที่ต้องการ

สมมติว่าคุณได้ติดตั้ง Certbot และ Cloudflare Plugin เรียบร้อยแล้ว คำสั่งสำหรับขอใบรับรองจะเป็นดังนี้:

SQL

SQL

certbot certonly --dns-cloudflare --dns-cloudflare-credentials /path/to/cloudflare_api.ini -d example.com -d www.example.com

คำอธิบายโค้ด:

  • certonly: ระบุว่าต้องการเฉพาะใบรับรองเท่านั้น ไม่ต้องการติดตั้งอัตโนมัติ
  • --dns-cloudflare: ระบุว่าใช้ Cloudflare ในการตรวจสอบ DNS
  • --dns-cloudflare-credentials: ชี้ไปยังไฟล์ API Token ที่คุณสร้างไว้
  • -d example.com -d www.example.com: ระบุโดเมนที่ต้องการรับใบรับรอง

✅ การตรวจสอบผลลัพธ์ (Conceptual SQL Check)

ในเชิงแนวคิดของการตรวจสอบข้อมูล (Data Integrity Check) หากการดำเนินการสำเร็จ ข้อมูล DNS Record ที่เพิ่มเข้าไปจะถูกบันทึกและตรวจสอบได้:

SQL

SQL

SELECT * FROM dns_records WHERE record_type = 'TXT' AND record_name = 'example.com' AND record_value = 'abcdefg-verification';

หากคำสั่งนี้แสดงผลลัพธ์ที่ถูกต้อง แสดงว่าการยืนยันความเป็นเจ้าของโดเมนผ่าน DNS-01 สำเร็จแล้ว และคุณสามารถนำไฟล์ใบรับรองที่ได้ไปติดตั้งบน Web Server ของคุณได้ทันที

✨ บทสรุปสำหรับสถาปนิกระบบ

การใช้ DNS-01 Challenge คือมาตรฐานที่แนะนำสำหรับสภาพแวดล้อมที่มี Reverse Proxy หรือมีการป้องกันระดับสูงอย่าง Cloudflare เพราะมันทำให้กระบวนการออก SSL เป็นอิสระจากการเข้าถึงพอร์ต 80 และไม่จำเป็นต้องมีการปรับเปลี่ยนการตั้งค่า Cloudflare ใดๆ ทั้งสิ้น ทำให้ระบบมีความเสถียรและง่ายต่อการบำรุงรักษาในระยะยาว