ออก SSL ฟรีด้วย Certbot บน Nginx VPS

การขอใบ SSL (Secure Sockets Layer) ฟรีจาก Let's Encrypt เป็นวิธีที่ทำให้เว็บไซต์ของคุณใช้ HTTPS ได้อย่างปลอดภัยโดยไม่เสียค่าใช้จ่าย Certbot คือเครื่องมือที่ออกแบบมาสำหรับการขอ ติดตั้ง และจัดการ SSL certificates จาก Let's Encrypt โดยอัตโนมัติ บทความนี้จะบอกคุณวิธีติดตั้ง Certbot บน VPS Ubuntu ที่ใช้ Nginx ทั้งขั้นตอนการตั้งค่าและการออก SSL ให้เรียบร้อย

Certbot และ Let's Encrypt คืออะไร

Let's Encrypt คือ Certificate Authority (CA) ที่จัดให้มี SSL certificates ฟรีแก่ทุกคนบนโลก เพื่อเพิ่มความปลอดภัยของอินเทอร์เน็ต Certbot เป็น client software ที่พัฒนาโดย Electronic Frontier Foundation (EFF) ทำหน้าที่ติดต่อ Let's Encrypt API เพื่อขอใบ SSL จัดการอัพเดต และต่ออายุอัตโนมัติ

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

เพื่อให้กระบวนการเสร็จสิ้นสำเร็จ คุณจำเป็นต้องมีสิ่งต่อไปนี้:

ขั้นที่ 1 — ติดตั้ง Certbot บน Ubuntu

Certbot มีให้ใช้งานในระบบ package manager ของ Ubuntu ตรงไปตรงมา ให้รัน apt-get update ก่อนเพื่อให้แน่ใจว่าจะได้ version ล่าสุด

sudo apt-get update
sudo apt-get install -y certbot python3-certbot-nginx

ไฟล์ package python3-certbot-nginx คือ Nginx plugin ของ Certbot ซึ่งยึดกับ Nginx config อัตโนมัติเพื่อให้ SSL certificate ทำงานได้

ขั้นที่ 2 — เตรียม Nginx Config

ก่อนขอ SSL ต้องแน่ใจว่า Nginx config ของคุณได้ตั้ง server_name ไว้อย่างถูกต้อง

sudo nano /etc/nginx/sites-available/default

ตรวจสอบว่ามี server_name ถูกต้องดังนี้:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    root /var/www/html;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}

เสร็จแล้วให้ทดสอบ Nginx config ความถูกต้อง:

sudo nginx -t

ผลควรแสดง nginx: configuration file test is successful ถ้าผิดให้แก้จนกว่าจะผ่าน

⚠️ ห้าม skip ขั้นนี้: Certbot ต้องการ server_name ที่ตรงกับโดเมน ถ้าไม่ตรงกัน Certbot จะไม่สามารถขอ SSL ได้

ขั้นที่ 3 — ขอ SSL Certificate ด้วย Certbot

ตอนนี้พร้อมที่จะขอ SSL certificate แล้ว Certbot จะยืนยันให้มั่นใจว่าคุณเป็นเจ้าของโดเมน โดยใช้ HTTP-01 challenge (Certbot จะสร้างไฟล์ชั่วคราวใน web root แล้ว Let's Encrypt server จะมายืนยัน)

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

Certbot จะถามให้ใส่อีเมล และยอมรับเงื่อนไข บันทึก output ที่สำคัญ ตำแหน่ง certificate อยู่ที่:

/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem

ขั้นที่ 4 — ตั้งค่า Nginx ให้ใช้ SSL

เมื่อ certificate ออกมาแล้ว ต้องแก้ Nginx config ให้ใช้ SSL certificates นี้

sudo nano /etc/nginx/sites-available/default

แทนที่โครงสร้าง server block ให้เป็นแบบนี้ (รองรับทั้ง HTTP และ HTTPS):

# Redirect HTTP to HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

# HTTPS server block
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;

    # SSL certificates
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # SSL configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    root /var/www/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

ทดสอบ config ก่อน reload:

sudo nginx -t

ถ้าผลสำเร็จ ให้ reload Nginx:

sudo systemctl reload nginx

ขั้นที่ 5 — ตั้งค่า Auto-renew

ใบ SSL ของ Let's Encrypt มีอายุ 90 วัน Certbot สามารถต่ออายุอัตโนมัติได้โดยการตั้ง cron job ให้เรียก certbot renew ทุกวัน

sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer

ตรวจสอบ renewal timer ว่าตั้งค่าไว้ถูกต้องแล้ว:

sudo systemctl status certbot.timer

ให้ทดสอบว่า renewal command ทำงานได้:

sudo certbot renew --dry-run

ถ้าไม่มี error ก็แสดงว่าการตั้งค่าเรียบร้อยแล้ว

ขั้นที่ 6 — ตรวจสอบ SSL ที่ติดตั้งแล้ว

เมื่อตั้งค่า SSL เสร็จแล้ว ให้ตรวจสอบว่าทำงานได้อย่างถูกต้อง ไป https://example.com และดูว่า:

สำหรับการตรวจสอบลึกขึ้นไป สามารถใช้เครื่องมือเช่น SSL Server Test ของ Qualys ไปที่ https://www.ssllabs.com/ssltest/ แล้วใส่โดเมนของคุณ

💡 เคล็ดลับ: หลังจากเปลี่ยนจาก HTTP เป็น HTTPS ให้อัพเดต sitemap.xml และ robots.txt ให้ชี้ไปยัง HTTPS URLs ด้วย เพื่อให้ Google index ได้ถูกต้อง

Wildcard SSL ด้วย Certbot (ขั้นเพิ่มเติม)

ถ้าต้องการ SSL ที่ครอบคลุม *.example.com ทั้งหมด สามารถขอ Wildcard SSL ได้ แต่ต้องใช้ DNS challenge แทน HTTP challenge

sudo certbot certonly --manual --preferred-challenges=dns -d example.com -d *.example.com

Certbot จะให้คุณใส่ TXT record ใน DNS provider เพื่อยืนยันการเป็นเจ้าของโดเมน ขั้นตอนคือ:

  1. Certbot บอก TXT record name และ value ที่ต้องใส่
  2. ไปที่ DNS provider (Cloudflare, Namecheap, GoDaddy ฯลฯ) แล้วเพิ่ม TXT record นั้น
  3. กลับไปที่ Certbot แล้วกด Enter เพื่อยืนยัน
  4. Certbot จะตรวจสอบและออกใบ Wildcard SSL

Troubleshooting และปัญหาทั่วไป

❌ Error: "Couldn't connect to renewal server"

สาเหตุ: เซิร์ฟเวอร์อาจไม่เชื่อมต่ออินเทอร์เน็ตได้ หรือ DNS ไม่ทำงาน ข้อแนะนำ: ตรวจสอบ DNS resolution และการเชื่อมต่ออินเทอร์เน็ต:

nslookup example.com
curl -I https://www.google.com

❌ Error: "Timeout during connect"

สาเหตุ: ทะเบียน A ของโดเมนอาจยังไม่ได้ชี้ไปยัง IP ที่ถูกต้อง ให้ตรวจสอบ:

dig example.com

ดูว่า ANSWER section มี IP ที่ถูกต้องของ VPS หรือไม่ ถ้าไม่ ให้อัพเดต DNS ที่ registrar แล้ว wait 24-48 ชั่วโมงให้ DNS propagate

❌ Error: "Connection refused" บน port 80

สาเหตุ: Port 80 อาจถูก block ด้วย Firewall หรือไม่มีการ listen ให้ตรวจสอบ:

sudo ufw status
sudo iptables -L -n | grep 80

ถ้า firewall block ให้อนุญาต port 80:

sudo ufw allow 80
sudo ufw allow 443

❌ Certificate หมดอายุ แม้ว่า cron renewal ตั้งไว้

สาเหตุ: Renewal cron อาจไม่ทำงาน ให้ตรวจสอบ log:

sudo journalctl -u certbot.timer -n 50

ถ้า error ให้รัน renewal ด้วยมือ:

sudo certbot renew --force-renewal

สรุป

การติดตั้ง SSL ด้วย Certbot บน Nginx VPS เป็นกระบวนการที่ตรงไปตรงมา เพียง 6 ขั้นตอนคุณจะมี HTTPS ที่ปลอดภัยและต่ออายุอัตโนมัติตลอดไป ท้ายสุดขอให้ตรวจสอบ renewal ทำงานถูกต้อง เพื่อให้ใบ SSL ของคุณไม่เคยหมดอายุ

ต้องการ VPS สำหรับติดตั้ง Certbot + Nginx?

AsiaGB มี VPS Ubuntu พร้อม Full Root Access เหมาะสำหรับการตั้งค่า SSL อัตโนมัติ เริ่มต้นเพียง 500 บาท/เดือน พร้อม Uptime 99%

สมัครใช้งาน AsiaGB VPS

ดูแพ็กเกจ VPS ไทย ราคาถูกทั้งหมด →