ติดตั้ง SSL ด้วย Let’s Encrypt บน Ubuntu Server 26.04

ติดตั้ง SSL ด้วย Let’s Encrypt บน Ubuntu Server 26.04

เว็บขึ้นว่า Not Secure แก้อย่างไร

ถ้าเว็บไซต์ของเรายังเปิดผ่าน http:// อยู่ เบราว์เซอร์จะแสดงว่า Not Secure ซึ่งทำให้ผู้ใช้งานขาดความมั่นใจ โดยเฉพาะเว็บไซต์หน่วยงาน เว็บไซต์โรงเรียน วิทยาลัย ร้านค้าออนไลน์ หรือระบบภายในองค์กรที่มีการ Login

วิธีที่นิยมและใช้งานได้จริงคือการติดตั้ง SSL/TLS Certificate เพื่อให้เว็บไซต์รองรับ https:// โดยในบทความนี้แนะนำการใช้ Let’s Encrypt ซึ่งเป็นบริการออกใบรับรอง SSL ฟรี และใช้ Certbot เป็นเครื่องมือช่วยติดตั้งและต่ออายุใบรับรองอัตโนมัติ

บทความนี้ทดสอบแนวทางบน Ubuntu Server 26.04 LTS ซึ่งเป็นรุ่น LTS ที่ออกเมื่อวันที่ 23 เมษายน 2026 และได้รับการอัปเดตด้านความปลอดภัยตามรอบ LTS เป็นเวลา 5 ปีจนถึงเมษายน 2031


บทความนี้จะได้เรียนรู้อะไร

ในบทความนี้เราจะติดตั้ง SSL ให้เว็บไซต์บน Ubuntu Server โดยครอบคลุมทั้งกรณีใช้ Nginx และ Apache ผู้อ่านสามารถเลือกทำเฉพาะส่วนที่ตรงกับ Web Server ที่ใช้งานจริงได้

สิ่งที่จะทำ ได้แก่

  • เตรียม Domain และ DNS ให้ชี้มายัง Server

  • ติดตั้ง Certbot ด้วย Snap

  • เปิด Firewall สำหรับ HTTP และ HTTPS

  • ขอ SSL Certificate จาก Let’s Encrypt

  • ตั้งค่า HTTPS อัตโนมัติสำหรับ Nginx หรือ Apache

  • ทดสอบการต่ออายุ Certificate แบบอัตโนมัติ

  • ตรวจสอบปัญหาที่พบบ่อยหลังติดตั้ง


พื้นฐานที่จำเป็นก่อนเริ่ม

สิ่งที่ต้องมี

  • Ubuntu Server 26.04 LTS

  • สิทธิ์ผู้ใช้แบบ sudo

  • Domain Name ที่ชี้มายัง IP Address ของ Server แล้ว

  • Web Server ใช้อย่างใดอย่างหนึ่ง

    • Nginx

    • Apache

  • เปิด Port 80 และ 443 จาก Firewall หรือ Cloud Security Group

ตัวอย่างในบทความนี้จะใช้โดเมนสมมติ:

example.com
www.example.com

ให้เปลี่ยนเป็นโดเมนจริงของท่าน เช่น

www.sysadmin.in.th

หรือโดเมนของหน่วยงานที่ใช้งานจริง


ทำความเข้าใจก่อน: Let’s Encrypt และ Certbot คืออะไร

Let’s Encrypt คือ Certificate Authority ที่ออก SSL/TLS Certificate ให้ใช้งานฟรี เหมาะสำหรับเว็บไซต์ทั่วไป เว็บองค์กร เว็บโรงเรียน เว็บระบบภายในที่เปิดใช้งานผ่านอินเทอร์เน็ต และ Web Application ต่าง ๆ

Certbot คือเครื่องมือที่ช่วยขอ Certificate จาก Let’s Encrypt และติดตั้งเข้ากับ Web Server เช่น Nginx หรือ Apache ได้สะดวก โดย Certbot ออกแบบมาเพื่อเปลี่ยนเว็บไซต์ HTTP เดิมให้ใช้งานผ่าน HTTPS และช่วยต่ออายุใบรับรองให้อัตโนมัติในภายหลัง

โดยทั่วไป Certbot ต้องตรวจสอบว่าเราเป็นเจ้าของโดเมนจริงผ่าน Port 80 หรือผ่าน DNS Challenge แล้วแต่รูปแบบการใช้งาน ในบทความนี้จะใช้วิธีมาตรฐานผ่าน Web Server ซึ่งต้องให้เว็บไซต์เปิดผ่าน HTTP บน Port 80 ได้ก่อน

หมายเหตุ: Let’s Encrypt เคยออก Certificate อายุ 90 วัน และได้ประกาศแผนลดอายุ Certificate ลงเป็น 64 วันในปี 2027 และ 45 วันในปี 2028 ดังนั้นระบบต่ออายุอัตโนมัติจึงเป็นสิ่งสำคัญมาก ไม่ควรต่ออายุแบบ manual เองทุกครั้ง


ขั้นตอนที่ 1: ตรวจสอบ DNS ว่าชี้มาที่ Server แล้วหรือไม่

ก่อนติดตั้ง SSL ต้องตรวจสอบว่า Domain ชี้มายัง IP Address ของ Server แล้ว

dig example.com +short
dig www.example.com +short

ถ้ายังไม่มีคำสั่ง dig ให้ติดตั้งก่อน

sudo apt update
sudo apt install -y dnsutils

คำอธิบาย:

  • dig ใช้ตรวจสอบ DNS Record

  • +short แสดงผลแบบสั้น อ่านง่าย

  • ผลลัพธ์ควรเป็น Public IP ของ Server

ตัวอย่างผลลัพธ์:

203.0.113.10

หาก IP ที่ได้ไม่ตรงกับ Server ให้กลับไปแก้ DNS ที่ผู้ให้บริการ Domain ก่อน เช่น Cloudflare, Namecheap, THNIC, DirectAdmin DNS หรือ DNS ของ Hosting Provider


ขั้นตอนที่ 2: อัปเดตระบบ Ubuntu Server

อัปเดต Package ก่อนเริ่มติดตั้ง

sudo apt update
sudo apt upgrade -y

คำอธิบาย:

  • apt update อัปเดตรายการ Package ล่าสุด

  • apt upgrade -y อัปเกรด Package ที่ติดตั้งอยู่

  • -y ตอบ Yes อัตโนมัติ

แนะนำให้ Reboot หากมีการอัปเดต Kernel หรือ System Package สำคัญ

sudo reboot

หลังจาก Server กลับมา ให้ SSH เข้าไปใหม่

ssh username@server-ip

ขั้นตอนที่ 3: ตรวจสอบ Web Server ที่ใช้งาน

ถ้าใช้ Nginx ให้ตรวจสอบด้วยคำสั่ง

systemctl status nginx

ถ้าใช้ Apache ให้ตรวจสอบด้วยคำสั่ง

systemctl status apache2

ถ้ายังไม่ได้ติดตั้ง Web Server สามารถติดตั้งได้ดังนี้

ติดตั้ง Nginx

sudo apt install -y nginx
sudo systemctl enable --now nginx

ติดตั้ง Apache

sudo apt install -y apache2
sudo systemctl enable --now apache2

คำอธิบาย:

  • enable ให้ Service เริ่มทำงานอัตโนมัติหลัง Boot

  • --now ให้เริ่ม Service ทันที


ขั้นตอนที่ 4: เปิด Firewall สำหรับ HTTP และ HTTPS

ตรวจสอบสถานะ UFW

sudo ufw status verbose

กรณีใช้ Nginx

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'

กรณีใช้ Apache

sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'

ตรวจสอบ Profile ที่มีอยู่

sudo ufw app list

⚠️ ข้อควรระวัง: หากเป็น Server ที่ SSH จากระยะไกล ต้องอนุญาต OpenSSH ก่อนเปิดใช้งาน UFW ไม่เช่นนั้นอาจ SSH เข้า Server ไม่ได้

หาก UFW ยังไม่เปิดใช้งาน และต้องการเปิด ให้ใช้คำสั่ง

sudo ufw enable

ตรวจสอบอีกครั้ง

sudo ufw status

ควรเห็นประมาณนี้

OpenSSH       ALLOW
Nginx Full    ALLOW

หรือ

OpenSSH       ALLOW
Apache Full   ALLOW

ขั้นตอนที่ 5: ติดตั้ง Certbot ด้วย Snap

Certbot แนะนำให้ผู้ใช้ส่วนใหญ่ติดตั้งผ่าน Snap เพราะจัดการ dependency และการอัปเดตได้สะดวก โดย Certbot snap รองรับสถาปัตยกรรมหลัก เช่น x86_64, ARMv7 และ ARMv8

  • ติดตั้ง Snap หากยังไม่มี
sudo apt install -y snapd

  • อัปเดต Core ของ Snap
sudo snap install core
sudo snap refresh core
  • ลบ Certbot ที่เคยติดตั้งจาก apt ออกก่อน เพื่อป้องกันคำสั่งชนกัน
sudo apt remove -y certbot python3-certbot-nginx python3-certbot-apache
      • ติดตั้ง Certbot
sudo snap install --classic certbot
  • สร้าง symbolic link เพื่อให้เรียกใช้คำสั่ง certbot ได้สะดวก
sudo ln -sf /snap/bin/certbot /usr/local/bin/certbot

ตรวจสอบเวอร์ชัน

certbot --version

ขั้นตอนที่ 6A: ติดตั้ง SSL สำหรับ Nginx

ตรวจสอบว่า Nginx config มี server_name ถูกต้อง

sudo nano /etc/nginx/sites-available/example.com

ตัวอย่าง Server Block

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html index.htm;

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

ทดสอบ Config

sudo nginx -t

ถ้าไม่มี Error ให้ Reload Nginx

sudo systemctl reload nginx

ขอ SSL Certificate ด้วย Certbot

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

คำอธิบาย:

  • --nginx ให้ Certbot ใช้ Nginx Plugin

  • -d example.com ระบุโดเมนหลัก

  • -d www.example.com ระบุโดเมนย่อย

  • Certbot จะช่วยแก้ Nginx Config เพื่อเปิด HTTPS ให้อัตโนมัติ

Certbot รองรับคำสั่ง --nginx สำหรับ authentication และ installation กับ Nginx โดยตรง และสามารถใช้ certonly --nginx ได้หากต้องการขอ Certificate อย่างเดียวแล้วแก้ config เอง

ระหว่างติดตั้ง ระบบอาจถาม Email และการยอมรับ Terms of Service ให้กรอกตามจริง

หลังติดตั้งสำเร็จ ให้ทดสอบ

curl -I https://example.com

ตัวอย่างผลลัพธ์ที่ควรเห็น

HTTP/2 200
server: nginx

ขั้นตอนที่ 6B: ติดตั้ง SSL สำหรับ Apache

เปิดใช้งาน Apache SSL Module และ Rewrite Module

sudo a2enmod ssl
sudo a2enmod rewrite
sudo systemctl restart apache2

ตรวจสอบ Virtual Host

sudo nano /etc/apache2/sites-available/example.com.conf

ตัวอย่าง Config เบื้องต้น

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com

    DocumentRoot /var/www/example.com/html

    <Directory /var/www/example.com/html>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

เปิดใช้งาน Site

sudo a2ensite example.com.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

ขอ SSL Certificate

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

คำอธิบาย:

  • --apache ให้ Certbot จัดการร่วมกับ Apache

  • Certbot จะช่วยสร้าง/ปรับ VirtualHost สำหรับ HTTPS

  • สามารถเลือก redirect จาก HTTP ไป HTTPS ได้ในขั้นตอนติดตั้ง

Certbot มี plugin สำหรับ Apache, Nginx, Standalone และ Webroot โดยสามารถใช้เพื่อขอและติดตั้ง Certificate หรือใช้เฉพาะขอ Certificate แล้วนำไปติดตั้งเองก็ได้

ทดสอบ Apache หลังติดตั้ง

curl -I https://example.com

ตัวอย่างผลลัพธ์

HTTP/2 200
server: Apache

ขั้นตอนที่ 7: ตรวจสอบไฟล์ Certificate

หลังติดตั้งสำเร็จ Certificate จะอยู่ภายใต้ /etc/letsencrypt/

sudo ls -l /etc/letsencrypt/live/example.com/

ตัวอย่างไฟล์ที่พบ

cert.pem
chain.pem
fullchain.pem
privkey.pem

ความหมายโดยย่อ:

  • cert.pem คือ Certificate ของ Domain

  • chain.pem คือ Intermediate Certificate

  • fullchain.pem คือ Certificate รวม Chain ใช้กับ Web Server เป็นหลัก

  • privkey.pem คือ Private Key

⚠️ ข้อควรระวัง: ห้ามคัดลอกหรือเปิดเผย privkey.pem เพราะเป็นกุญแจส่วนตัวของเว็บไซต์ หากหลุดออกไปควร revoke และออก Certificate ใหม่ทันที


ขั้นตอนที่ 8: ทดสอบการต่ออายุอัตโนมัติ

Certbot ที่ติดตั้งจาก Snap จะมีระบบต่ออายุผ่าน cron หรือ systemd timer โดยสามารถทดสอบได้ด้วยคำสั่ง

sudo certbot renew --dry-run

คำสั่งนี้เป็นการจำลองการต่ออายุ Certificate โดยยังไม่ต่ออายุจริง เหมาะสำหรับตรวจสอบว่าระบบพร้อมทำงานหรือไม่

Certbot ระบุว่าสามารถทดสอบ automatic renewal ด้วย sudo certbot renew --dry-run และระบบที่ติดตั้ง Certbot จะมี cron job หรือ systemd timer สำหรับต่ออายุอัตโนมัติก่อน Certificate หมดอายุ

ตรวจสอบ Timer

systemctl list-timers | grep certbot

หรือ

systemctl list-timers | grep snap.certbot

ดูรายการ Certificate ที่มีอยู่

sudo certbot certificates

ขั้นตอนที่ 9: บังคับ Redirect HTTP ไป HTTPS

โดยปกติถ้าใช้ certbot --nginx หรือ certbot --apache ระบบจะถามว่าต้องการ redirect HTTP ไป HTTPS หรือไม่ แนะนำให้เลือก redirect เพื่อให้ผู้ใช้งานเข้าเว็บแบบปลอดภัยเสมอ

ตัวอย่าง Redirect บน Nginx

server {
    listen 80;
    server_name example.com www.example.com;

    return 301 https://$host$request_uri;
}

หลังแก้ไขให้ทดสอบและ Reload

sudo nginx -t
sudo systemctl reload nginx

ตัวอย่าง Redirect บน Apache

เปิดใช้ Rewrite Module ก่อน

sudo a2enmod rewrite
sudo systemctl restart apache2

ตัวอย่างใน VirtualHost Port 80

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>

ทดสอบ Config

sudo apache2ctl configtest
sudo systemctl reload apache2

ขั้นตอนที่ 10: Verify ผ่าน Browser และ Command Line

เปิด Browser แล้วเข้า

https://example.com

สิ่งที่ควรเห็น:

  • มีรูปกุญแจที่ Address Bar

  • URL เป็น https://

  • ไม่มี Warning เรื่อง Certificate

  • ถ้าเข้า http://example.com ควรถูก redirect ไป https://example.com

ตรวจสอบด้วย curl

curl -I http://example.com

หาก Redirect สำเร็จ ควรเห็นสถานะประมาณนี้

HTTP/1.1 301 Moved Permanently
Location: https://example.com/

ตรวจสอบ HTTPS

curl -I https://example.com

ควรได้สถานะ 200, 301 หรือ 302 ตามระบบเว็บไซต์ของเรา


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

1. DNS ยังไม่ชี้มายัง Server

อาการ:

Timeout during connect

หรือ Certbot แจ้งว่าไม่สามารถ validate domain ได้

ตรวจสอบด้วย

dig example.com +short

แนวทางแก้:

  • ตรวจสอบ A Record

  • ตรวจสอบ AAAA Record หากมี IPv6

  • รอ DNS Propagation

  • ตรวจสอบว่า Cloudflare Proxy เปิด/ปิดเหมาะสม


2. Port 80 หรือ 443 ถูกปิด

ตรวจสอบ UFW

sudo ufw status

ตรวจสอบว่า Web Server ฟัง Port หรือไม่

sudo ss -tulpn | grep -E ':80|:443'

แนวทางแก้:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

หากใช้ Cloud Provider เช่น AWS, Google Cloud, Azure, DigitalOcean หรือ VPS ไทย ต้องตรวจสอบ Firewall/Security Group ที่หน้า Control Panel ด้วย


3. Nginx หรือ Apache Config ผิด

สำหรับ Nginx

sudo nginx -t

สำหรับ Apache

sudo apache2ctl configtest

ดู Log เพิ่มเติม

sudo journalctl -u nginx --no-pager -n 50
sudo journalctl -u apache2 --no-pager -n 50

4. มี Certbot หลายตัวจากหลายแหล่ง

หากเคยติดตั้ง Certbot จาก apt และติดตั้งจาก snap ซ้ำกัน อาจทำให้เรียกคำสั่งผิดตัว

ตรวจสอบตำแหน่งคำสั่ง

which certbot

ควรได้ประมาณนี้

/usr/local/bin/certbot

หรือเกี่ยวข้องกับ Snap

/snap/bin/certbot

หากยังมี Certbot จาก apt ให้ลบออก

sudo apt remove -y certbot python3-certbot-nginx python3-certbot-apache

คำสั่งสรุปแบบเร็วสำหรับ Nginx

# อัปเดตระบบ
sudo apt update
sudo apt upgrade -y

# ติดตั้ง snapd และ certbot
sudo apt install -y snapd
sudo snap install core
sudo snap refresh core
sudo apt remove -y certbot python3-certbot-nginx
sudo snap install --classic certbot
sudo ln -sf /snap/bin/certbot /usr/local/bin/certbot

# เปิด firewall สำหรับ Nginx
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'

# ขอ SSL Certificate
sudo certbot --nginx -d example.com -d www.example.com

# ทดสอบต่ออายุ
sudo certbot renew --dry-run

คำสั่งสรุปแบบเร็วสำหรับ Apache

# อัปเดตระบบ
sudo apt update
sudo apt upgrade -y

# ติดตั้ง snapd และ certbot
sudo apt install -y snapd
sudo snap install core
sudo snap refresh core
sudo apt remove -y certbot python3-certbot-apache
sudo snap install --classic certbot
sudo ln -sf /snap/bin/certbot /usr/local/bin/certbot

# เปิด firewall สำหรับ Apache
sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'

# เปิด module ที่จำเป็น
sudo a2enmod ssl
sudo a2enmod rewrite
sudo systemctl restart apache2

# ขอ SSL Certificate
sudo certbot --apache -d example.com -d www.example.com

# ทดสอบต่ออายุ
sudo certbot renew --dry-run

แนะนำ Screenshot สำหรับบทความ

ควรเพิ่มภาพประกอบในบทความตามจุดต่อไปนี้

  1. หน้า Browser ก่อนติดตั้ง SSL ที่แสดง Not Secure

  2. ผลลัพธ์คำสั่ง dig example.com +short

  3. ผลลัพธ์ sudo certbot --nginx หรือ sudo certbot --apache

  4. หน้า Browser หลังติดตั้ง SSL ที่แสดงรูปกุญแจ

  5. ผลลัพธ์ sudo certbot renew --dry-run

  6. ผลลัพธ์ sudo certbot certificates


สรุป

การติดตั้ง SSL ด้วย Let’s Encrypt บน Ubuntu Server 26.04 ไม่ซับซ้อน หากเตรียม DNS, Web Server และ Firewall ให้ถูกต้องก่อนเริ่มใช้งาน จุดสำคัญคือควรติดตั้ง Certbot ผ่าน Snap ตามแนวทางที่ Certbot แนะนำ ใช้ plugin ให้ตรงกับ Web Server เช่น --nginx หรือ --apache และต้องทดสอบการต่ออายุด้วย certbot renew --dry-run ทุกครั้งหลังติดตั้ง

สำหรับงาน Production แนะนำให้ตรวจสอบ HTTPS, Redirect, Firewall และระบบต่ออายุอัตโนมัติให้ครบ เพราะ SSL Certificate มีอายุจำกัด และแนวโน้มในอนาคตอายุ Certificate จะสั้นลง การมี automation ที่ทำงานได้จริงจึงสำคัญมาก



Write by Dr.Arnut Ruttanatirakul
SysAdmin Knowledge
https://www.sysadmin.in.th
July 1, 2026