
สารบัญ
- Let's Encrypt คืออะไร ทำไมต้องต่ออายุทุก 90 วัน
- ติดตั้ง Certbot บน Ubuntu / Debian / CentOS
- ขอ Certificate ครั้งแรกด้วย Certbot
- ตั้งค่า Auto-Renewal ด้วย systemd Timer
- ตั้งค่า Auto-Renewal ด้วย Cron Job
- ตรวจสอบว่า Auto-Renewal ทำงานถูกต้อง
- แก้ปัญหา Certbot Renew ที่พบบ่อย
- เปรียบเทียบ Let's Encrypt กับ SSL ที่ซื้อ
- ใช้ Let's Encrypt บน DirectAdmin
- คำถามที่พบบ่อย (FAQ)
- สรุป
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 วันโดยเจตนา ด้วยเหตุผลด้านความปลอดภัย:
- จำกัดความเสียหาย: ถ้า Private Key ถูกขโมย Certificate เก่าจะหมดอายุเร็ว ลดเวลาที่ผู้โจมตีจะใช้ประโยชน์ได้
- บังคับ Automation: อายุสั้นทำให้ผู้ดูแลต้องใช้ Certbot หรือ ACME Client อัตโนมัติ ลดความผิดพลาดจากการทำเอง
- Revocation ทำงานได้เร็วกว่า: Certificate อายุสั้นลดความจำเป็นของ OCSP/CRL ที่มักมีปัญหาเรื่อง caching
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/certbotDebian 12
sudo apt update && sudo apt install certbot python3-certbot-nginx -y
# หรือสำหรับ Apache:
sudo apt install certbot python3-certbot-apache -yCentOS / 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.comCertbot จะถามที่อยู่ 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 certbotEnable 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 ล้มเหลว)
ตรวจสอบ:
- Firewall เปิด Port 80 ไว้ (
sudo ufw allow 80) - DNS ชี้มาที่ Server IP ถูกต้อง
- Web Server ทำงานอยู่และ serve ไฟล์ใน
/.well-known/acme-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:
- เข้าสู่ DirectAdmin Control Panel
- ไปที่ SSL Certificates ในเมนู Account Manager
- เลือก Free & automatic certificate from Let's Encrypt
- กด Save
- 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 ไม่ได้ยากอย่างที่คิด ขอสรุปขั้นตอนหลัก:
- ติดตั้ง Certbot ผ่าน Snap (Ubuntu) หรือ apt/dnf สำหรับ distro อื่น
- ขอ Certificate ครั้งแรกด้วย
certbot --nginxหรือcertbot --apache - ตรวจสอบ systemd timer ด้วย
systemctl status certbot.timer - ถ้าไม่มี timer ให้เพิ่ม cron job รัน
certbot renew --quietวันละ 2 ครั้ง - ทดสอบด้วย
certbot renew --dry-runก่อนเสมอ - ตั้ง email alert รับแจ้งเตือนเมื่อ Certificate ใกล้หมดอายุ
สำหรับผู้ใช้ 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 ทั้งหมด →