ตั้งค่า SSL Let's Encrypt Auto-Renewal ด้วย Certbot

SSL Let's Encrypt เป็น Certificate ฟรีที่ได้รับความนิยมสูงมากในหมู่นักพัฒนาเว็บและผู้ดูแลเซิร์ฟเวอร์ แต่จุดที่หลายคนพลาดคือ Let's Encrypt มีอายุแค่ 90 วัน ถ้าไม่มีการต่ออายุอัตโนมัติ เว็บจะแสดงคำเตือน "ไม่ปลอดภัย" ทันที บทความนี้จะพาทำ Auto-Renewal ให้ครบ ตั้งแต่ติดตั้ง Certbot จนถึงตรวจสอบว่าระบบทำงานถูกต้อง

Let's Encrypt คืออะไร ทำไมต้องต่ออายุทุก 90 วัน

Let's Encrypt คือ Certificate Authority (CA) แบบ Open Source ที่บริหารโดยมูลนิธิ ISRG (Internet Security Research Group) มีเป้าหมายทำให้ทุกเว็บไซต์มี HTTPS ได้โดยไม่เสียค่าใช้จ่าย

ทำไมอายุแค่ 90 วัน? Let's Encrypt ตั้งอายุ Certificate ไว้ 90 วันโดยเจตนา ด้วยเหตุผลด้านความปลอดภัย:

Certbot จะ renew เมื่อเหลืออายุ น้อยกว่า 30 วัน คือทุกๆ ประมาณ 60 วัน ซึ่งมีระยะเผื่อพอสมควร

💡 สำคัญ: Certbot ที่ติดตั้งผ่าน Snap (Ubuntu) จะสร้าง systemd timer ให้อัตโนมัติ ส่วนการติดตั้งแบบ apt/yum อาจต้องตั้ง cron job เองขึ้นอยู่กับ distro

ติดตั้ง Certbot บน Ubuntu / Debian / CentOS

วิธีแนะนำในปี 2026 คือใช้ Snap Package ซึ่งได้ Certbot เวอร์ชันล่าสุดเสมอและมี systemd timer ตั้งให้อัตโนมัติ

Ubuntu 22.04 / 24.04 (แนะนำ)

sudo apt update sudo apt install snapd -y sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot

Debian 12

sudo apt update && sudo apt install certbot python3-certbot-nginx -y # หรือสำหรับ Apache: sudo apt install certbot python3-certbot-apache -y

CentOS / AlmaLinux / Rocky Linux

sudo dnf install epel-release -y sudo dnf install certbot python3-certbot-nginx -y

ตรวจสอบว่า Certbot ติดตั้งสำเร็จ:

certbot --version # ควรได้ผลลัพธ์เช่น: certbot 2.x.x

ขอ Certificate ครั้งแรกด้วย Certbot

ก่อนตั้งค่า Auto-Renewal ต้องขอ Certificate ก่อน โดย Certbot จะตั้งค่า Web Server ให้อัตโนมัติ:

สำหรับ Nginx

sudo certbot --nginx -d example.com -d www.example.com

สำหรับ Apache

sudo certbot --apache -d example.com -d www.example.com

แบบ Standalone (ถ้าไม่มี Web Server)

sudo certbot certonly --standalone -d example.com

Certbot จะถามที่อยู่ email สำหรับรับแจ้งเตือนก่อน Certificate หมดอายุ ควรกรอก email จริงที่ตรวจสอบบ่อย

⚠️ หมายเหตุ: Port 80 และ 443 ต้องเปิดอยู่บน Firewall ระหว่างขอ Certificate และ Renew Let's Encrypt Challenge ต้องการ HTTP-01 หรือ DNS-01 challenge เพื่อยืนยันว่าคุณเป็นเจ้าของโดเมน

ตั้งค่า Auto-Renewal ด้วย systemd Timer

Certbot ที่ติดตั้งผ่าน Snap จะสร้าง systemd timer ให้อัตโนมัติชื่อ snap.certbot.renew.timer ตรวจสอบดูได้ด้วย:

sudo systemctl status snap.certbot.renew.timer # หรือสำหรับ apt install: sudo systemctl status certbot.timer

ถ้า timer ทำงานอยู่จะเห็นสถานะ active (waiting) ซึ่งหมายความว่า Certbot จะรัน renew ทุกวันโดยอัตโนมัติ

ดูว่า timer ถูกตั้งเวลาไว้เมื่อไหร่:

sudo systemctl list-timers | grep certbot

Enable timer ถ้ายังไม่ได้เปิด:

sudo systemctl enable --now certbot.timer sudo systemctl enable --now snap.certbot.renew.timer

ตั้งค่า Auto-Renewal ด้วย Cron Job

สำหรับระบบที่ไม่มี systemd หรือต้องการควบคุมเวลาเองด้วย cron job:

sudo crontab -e

เพิ่มบรรทัดนี้เพื่อรัน renew วันละ 2 ครั้ง (เช้า 3:30 และ บ่าย 15:30) ตามที่ Let's Encrypt แนะนำ:

0 3,15 * * * /usr/bin/certbot renew --quiet --deploy-hook "systemctl reload nginx"

สำหรับ Apache แทน nginx ด้วย apache2:

0 3,15 * * * /usr/bin/certbot renew --quiet --deploy-hook "systemctl reload apache2"

--quiet จะซ่อน output ปกติและแสดงเฉพาะ error, --deploy-hook จะ reload Web Server เฉพาะเมื่อมีการ renew จริงเท่านั้น

💡 เคล็ดลับ: ใช้เวลาที่ไม่ตรงกันกับ server อื่นๆ มากมาย Let's Encrypt แนะนำให้ใช้เวลาสุ่มเพื่อกระจาย load บน CA Server ของพวกเขา

ตรวจสอบว่า Auto-Renewal ทำงานถูกต้อง

ขั้นตอนนี้สำคัญมาก ควรทดสอบก่อน Certificate จะหมดอายุจริง:

Dry Run Test (ทดสอบโดยไม่ดาวน์โหลด Certificate จริง)

sudo certbot renew --dry-run

ถ้าได้ผลลัพธ์ Congratulations, all renewals succeeded แปลว่าระบบพร้อมทำงาน

ตรวจสอบวันหมดอายุของ Certificate ปัจจุบัน

sudo certbot certificates

จะแสดงรายการ Certificate ทั้งหมด พร้อมวันหมดอายุและจำนวนวันที่เหลือ

ตรวจสอบจาก Shell โดยตรง

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | \ openssl x509 -noout -dates

ดู Log ของ Certbot

sudo cat /var/log/letsencrypt/letsencrypt.log | tail -50

แก้ปัญหา Certbot Renew ที่พบบ่อย

ปัญหาที่พบบ่อยและวิธีแก้ไขแต่ละอย่าง:

ปัญหา 1: Error: Could not bind to IPv4/IPv6 (Port 80 ถูกใช้งาน)

เกิดเมื่อใช้ --standalone แต่ Web Server กำลังใช้ Port 80 อยู่

sudo systemctl stop nginx # หรือ apache2 sudo certbot renew sudo systemctl start nginx

หรือใช้ --nginx / --apache Plugin แทน standalone เพื่อไม่ต้องหยุด Server

ปัญหา 2: Too many requests / Rate Limit

Let's Encrypt จำกัด 50 Certificate ต่อโดเมนต่อสัปดาห์ ถ้าทดสอบบ่อยเกินไปอาจโดน Rate Limit ใช้ Staging Environment สำหรับทดสอบ:

sudo certbot --nginx --staging -d example.com

ปัญหา 3: Domain validation failed (Challenge ล้มเหลว)

ตรวจสอบ:

sudo ufw status nslookup example.com curl http://example.com/.well-known/acme-challenge/test

ปัญหา 4: Certificate ต่ออายุแล้วแต่เว็บยังแสดง Certificate เก่า

Web Server ยังไม่ได้ reload ให้รัน:

sudo systemctl reload nginx # หรือ sudo systemctl reload apache2

ตรวจสอบว่า --deploy-hook ใน cron job ทำงาน หรือเพิ่ม hook ใน Certbot config:

sudo nano /etc/letsencrypt/renewal/example.com.conf # เพิ่ม: deploy_hook = systemctl reload nginx

เปรียบเทียบ Let's Encrypt กับ SSL ที่ซื้อ

ก่อนตัดสินใจว่าจะใช้ Let's Encrypt หรือ SSL ที่ซื้อ ดูตารางเปรียบเทียบนี้:

คุณสมบัติ Let's Encrypt SSL ที่ซื้อ (DV/OV/EV)
ราคา ฟรี เริ่มต้น 1,000 บาท/ปี
อายุ Certificate 90 วัน (ต่ออายุอัตโนมัติ) 1-3 ปี
ประเภท DV เท่านั้น DV / OV / EV / Wildcard
Wildcard SSL รองรับ (ต้องใช้ DNS Challenge) รองรับ
Multi-domain (SAN) รองรับ (สูงสุด 100 โดเมน) รองรับ
การรับรอง OV/EV ไม่มี มี (แสดงชื่อบริษัทใน Certificate)
Warranty ไม่มี มี (10,000 - 1,750,000 USD)
Support Community 24/7 Technical Support
เหมาะกับ Personal site, Dev, Startup ธุรกิจ, E-commerce, Banking

💡 คำแนะนำ: Let's Encrypt เหมาะสำหรับเว็บส่วนตัว บล็อก และโปรเจกต์ที่ไม่รับชำระเงิน สำหรับ E-commerce หรือเว็บธุรกิจที่รับข้อมูลบัตรเครดิต ควรใช้ OV หรือ EV SSL ที่มี Warranty และการรับรององค์กร

ใช้ Let's Encrypt บน DirectAdmin

ผู้ใช้ Hosting ที่ใช้ DirectAdmin ไม่จำเป็นต้องใช้ Certbot เพราะ DirectAdmin มี Let's Encrypt Built-in:

  1. เข้าสู่ DirectAdmin Control Panel
  2. ไปที่ SSL Certificates ในเมนู Account Manager
  3. เลือก Free & automatic certificate from Let's Encrypt
  4. กด Save
  5. DirectAdmin จะออก Certificate ให้และตั้ง Auto-Renewal โดยอัตโนมัติ

DirectAdmin ที่ AsiaGB มี Let's Encrypt Built-in ครบทุกแพ็กเกจ ไม่ต้องติดตั้งเพิ่มเติมหรือใช้ Command Line

⚠️ สำหรับ VPS: ถ้าใช้ VPS ที่ AsiaGB และติดตั้ง Web Server เองผ่าน Command Line ให้ทำตามขั้นตอน Certbot ด้านบน หรือจะติดตั้ง DirectAdmin บน VPS ก็ได้เช่นกัน

คำถามที่พบบ่อย (FAQ)

Let's Encrypt SSL หมดอายุทุกกี่วัน?

Let's Encrypt SSL Certificate มีอายุ 90 วัน (3 เดือน) ซึ่งสั้นกว่า SSL ที่ซื้อทั่วไปที่มักมีอายุ 1 ปี Certbot จะ renew ให้อัตโนมัติเมื่อเหลืออายุน้อยกว่า 30 วัน

Certbot auto renew ทำงานอย่างไร?

Certbot ตรวจสอบ Certificate ทุกวัน (ผ่าน systemd timer หรือ cron job) จะทำการต่ออายุอัตโนมัติเมื่อเหลืออายุน้อยกว่า 30 วัน โดยดาวน์โหลด Certificate ใหม่และ reload Web Server ให้โดยอัตโนมัติ

ถ้า Certbot renew ล้มเหลวเว็บจะหยุดทำงานไหม?

Certificate เก่ายังใช้ได้จนกว่าจะหมดอายุจริง การ renew ล้มเหลว 1-2 ครั้งจะไม่ทำให้เว็บหยุดทันที แต่ถ้าปล่อยจน Certificate หมดอายุจริง เว็บจะแสดงคำเตือน SSL ควรตั้ง email alert เพื่อรับแจ้งเตือนเมื่อ renew ล้มเหลว

ใช้ Let's Encrypt กับ DirectAdmin ได้ไหม?

ได้ DirectAdmin รองรับ Let's Encrypt Built-in ผ่าน SSL Manager สามารถเปิดใช้งานและตั้ง Auto-Renewal ได้จากหน้า SSL ใน DirectAdmin โดยไม่ต้องติดตั้ง Certbot เพิ่มเติม

certbot renew --dry-run คืออะไร?

certbot renew --dry-run คือการทดสอบกระบวนการ renew โดยไม่ได้ดาวน์โหลด Certificate จริง ใช้เพื่อตรวจสอบว่า Certbot ทำงานถูกต้องก่อน Deploy บน Production Server

ต้องมี VPS ถึงจะใช้ Certbot ได้ไหม?

Certbot CLI จำเป็นต้องใช้บน VPS หรือ Dedicated Server ที่เข้าถึง Command Line ได้ สำหรับ Web Hosting ที่ใช้ DirectAdmin มี Let's Encrypt Built-in ใน Control Panel ให้ใช้โดยไม่ต้องใช้ Certbot โดยตรง

Let's Encrypt รองรับ Wildcard ไหม?

รองรับ แต่ต้องใช้ DNS-01 Challenge แทน HTTP-01 โดยรัน: certbot certonly --manual --preferred-challenges dns -d "*.example.com" และเพิ่ม TXT Record ตามที่ Certbot กำหนด

สรุป

การตั้งค่า Auto-Renewal สำหรับ SSL Let's Encrypt ไม่ได้ยากอย่างที่คิด ขอสรุปขั้นตอนหลัก:

สำหรับผู้ใช้ Hosting ที่ AsiaGB ใช้ DirectAdmin ไม่ต้องทำอะไรเพิ่ม เพราะ Let's Encrypt Auto-Renewal ทำงานในระดับ Control Panel อยู่แล้ว หากต้องการ SSL ที่มี Warranty และการรับรององค์กร ดูรายละเอียด SSL Certificate เพิ่มเติมได้ที่หน้า SSL ของ AsiaGB

ต้องการ SSL ที่มั่นใจกว่า?

AsiaGB มี SSL Certificate หลายประเภท ทั้ง DV, OV, EV และ Wildcard รองรับทุกความต้องการ พร้อม Warranty และ Support ตลอด 24 ชั่วโมง

ดู SSL Certificate ทั้งหมด →