เว็บขึ้นว่า 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 สำหรับบทความ
ควรเพิ่มภาพประกอบในบทความตามจุดต่อไปนี้
-
หน้า Browser ก่อนติดตั้ง SSL ที่แสดง
Not Secure -
ผลลัพธ์คำสั่ง
dig example.com +short -
ผลลัพธ์
sudo certbot --nginxหรือsudo certbot --apache -
หน้า Browser หลังติดตั้ง SSL ที่แสดงรูปกุญแจ
-
ผลลัพธ์
sudo certbot renew --dry-run -
ผลลัพธ์
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

