ตรวจสอบ SSL Certificate และวันหมดอายุ
SSL Certificate (ชื่อที่ถูกต้องในปัจจุบันคือ TLS Certificate) ทุกใบมีวันหมดอายุ เมื่อหมดอายุแล้ว เบราว์เซอร์จะแสดงหน้าคำเตือนเต็มจอ ผู้เข้าชมส่วนใหญ่จะปิดหน้าเว็บทันที ร้านค้าออนไลน์รับชำระเงินไม่ได้ แอปมือถือที่เรียก API จะเชื่อมต่อไม่ได้ และโปรแกรมอีเมลจะแจ้งข้อผิดพลาดเรื่องใบรับรอง
ปัจจุบันอายุใบรับรองสั้นลงเรื่อยๆ Let's Encrypt ออกใบรับรองอายุ 90 วัน และตั้งแต่เดือนมีนาคม 2026 ใบรับรองสาธารณะแบบเสียเงินก็มีอายุได้ไม่เกิน 200 วันตามข้อกำหนดของ CA/Browser Forum ซึ่งจะลดลงอีกในปีต่อๆ ไป การต่ออายุอัตโนมัติจึงสำคัญ และการตรวจสอบว่าการต่ออายุทำงานจริงก็สำคัญไม่แพ้กัน บทความนี้แสดงวิธีตรวจใบรับรองจากเบราว์เซอร์ คำสั่ง OpenSSL บนเครื่องเซิร์ฟเวอร์ และบน Windows
สิ่งที่ต้องเตรียม
- เครื่อง Linux หรือ macOS ที่มีคำสั่ง
openssl(มีมาให้ในระบบส่วนใหญ่) หรือ Windows ที่มี PowerShell - รายชื่อโดเมนและ Subdomain ทั้งหมดที่ใช้ HTTPS รวมถึงเซิร์ฟเวอร์อีเมล เช่น
mail.example.com - สิทธิ์
sudoบนเซิร์ฟเวอร์ ถ้าต้องการตรวจสถานะ Certbot
ขั้นตอนที่ 1: ตรวจจากเบราว์เซอร์
วิธีที่เร็วที่สุดสำหรับการตรวจครั้งเดียว ใน Chrome หรือ Edge คลิกไอคอนด้านซ้ายของช่อง URL เลือก Connection is secure แล้วเลือก Certificate is valid จะเห็นผู้ออกใบรับรอง (Issued By) และช่วงวันที่ใช้งานได้ (Validity Period) ใน Firefox คลิกไอคอนแม่กุญแจ เลือก Connection secure แล้ว More information และ View Certificate ชื่อเมนูอาจต่างกันเล็กน้อยตามเวอร์ชันเบราว์เซอร์
ข้อจำกัดคือเบราว์เซอร์อาจแสดงใบรับรองจาก CDN (เช่น Cloudflare) ไม่ใช่ใบบนเซิร์ฟเวอร์ต้นทาง และตรวจเซิร์ฟเวอร์อีเมลไม่ได้
ขั้นตอนที่ 2: ตรวจด้วย OpenSSL
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates -ext subjectAltName
ตัวอย่างผลลัพธ์
subject=CN = example.com
issuer=C = US, O = Let's Encrypt, CN = R12
notBefore=Aug 20 03:15:02 2026 GMT
notAfter=Nov 18 03:15:01 2026 GMT
X509v3 Subject Alternative Name:
DNS:example.com, DNS:www.example.com
notAfterคือวันหมดอายุ (เวลา GMT ต้องบวก 7 ชั่วโมงเป็นเวลาไทย)Subject Alternative Nameคือรายชื่อโดเมนที่ใบนี้ครอบคลุม ถ้าเว็บเปิดด้วยwwwแต่ไม่มีชื่อนี้ในรายการ เบราว์เซอร์จะเตือนว่าชื่อไม่ตรง-servernameจำเป็นสำหรับเซิร์ฟเวอร์ที่มีหลายเว็บใน IP เดียว (SNI) ถ้าไม่ใส่อาจได้ใบรับรองของเว็บอื่นมาแทน- ตัวเลือก
-extต้องใช้ OpenSSL 1.1.1 ขึ้นไป ซึ่งมีใน Ubuntu 22.04/24.04 และ AlmaLinux/Rocky 8-9
ถ้าต้องการตรวจเซิร์ฟเวอร์ต้นทางที่อยู่หลัง CDN ให้ต่อตรงไปที่ IP ของเซิร์ฟเวอร์ แต่ยังส่งชื่อโดเมนใน SNI
echo | openssl s_client -connect 203.0.113.10:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -dates
ตรวจเซิร์ฟเวอร์อีเมล
# SMTPS พอร์ต 465 และ IMAPS พอร์ต 993
echo | openssl s_client -connect mail.example.com:465 -servername mail.example.com 2>/dev/null | openssl x509 -noout -enddate
echo | openssl s_client -connect mail.example.com:993 -servername mail.example.com 2>/dev/null | openssl x509 -noout -enddate
# Submission พอร์ต 587 ที่ใช้ STARTTLS
echo | openssl s_client -starttls smtp -connect mail.example.com:587 -servername mail.example.com 2>/dev/null | openssl x509 -noout -enddate
ตรวจว่าจะหมดอายุภายในกี่วัน
ตัวเลือก -checkend รับค่าเป็นวินาที ตัวอย่างนี้ตรวจว่าจะหมดอายุภายใน 14 วันหรือไม่ (14 x 86400 = 1209600)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -checkend 1209600
ถ้ายังเหลือมากกว่า 14 วันจะแสดง Certificate will not expire ถ้าน้อยกว่าจะแสดง Certificate will expire และคืนค่า Exit Code เป็น 1 ซึ่งนำไปใช้ในสคริปต์ได้
ขั้นตอนที่ 3: สคริปต์ตรวจหลายโดเมนและแจ้งเตือน
สร้างไฟล์ /usr/local/bin/check-ssl.sh
#!/bin/bash
# รายการ host:port ที่ต้องตรวจ
TARGETS="example.com:443 www.example.com:443 mail.example.com:993"
WARN_DAYS=21
for t in $TARGETS; do
host=${t%%:*}
end=$(echo | openssl s_client -connect "$t" -servername "$host" 2>/dev/null \
| openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
if [ -z "$end" ]; then
echo "ERROR: $t no certificate or connection failed"
continue
fi
days=$(( ( $(date -d "$end" +%s) - $(date +%s) ) / 86400 ))
if [ "$days" -lt "$WARN_DAYS" ]; then
echo "WARNING: $t expires in $days days ($end)"
fi
done
sudo chmod +x /usr/local/bin/check-ssl.sh
/usr/local/bin/check-ssl.sh
ถ้าทุกใบยังเหลือมากกว่า 21 วัน สคริปต์จะไม่แสดงอะไร ตั้งเป็น Cronjob ให้ทำงานทุกเช้า Cron จะส่งอีเมลผลลัพธ์ไปหา MAILTO เมื่อมีข้อความออกมาเท่านั้น (เครื่องต้องส่งอีเมลออกได้)
[email protected]
0 8 * * * /usr/local/bin/check-ssl.sh
คำสั่ง date -d เป็นของ GNU coreutils ใช้ได้บน Linux ถ้ารันบน macOS ต้องใช้รูปแบบ date -j -f แทน ดูวิธีตั้ง Cronjob ได้ที่ ตั้งค่า Cronjob บน DirectAdmin หรือ วิธีตั้ง Cronjob หรือ Crontab เพื่อให้ Script ทำงานอัตโนมัติบน Linux
ขั้นตอนที่ 4: ตรวจการต่ออายุอัตโนมัติของ Certbot
sudo certbot certificates
แสดงใบรับรองทุกใบที่ Certbot ดูแล พร้อม Expiry Date และจำนวนวันที่เหลือ (VALID: 62 days) จากนั้นทดสอบการต่ออายุโดยไม่ขอใบจริง
sudo certbot renew --dry-run
ต้องได้ข้อความ Congratulations, all simulated renewals succeeded ตรวจว่าตัวตั้งเวลาทำงานอยู่
systemctl list-timers | grep -i certbot
ถ้าติดตั้งผ่าน snap จะเห็น snap.certbot.renew.timer ถ้าติดตั้งจากแพ็กเกจของระบบจะเห็น certbot.timer หรือ certbot-renew.timer (AlmaLinux/Rocky ผ่าน EPEL ต้องสั่ง sudo systemctl enable --now certbot-renew.timer เอง) ดูการติดตั้งได้ที่ ติดตั้ง SSL ฟรีจาก Let's Encrypt ด้วย Certbot บน Nginx
บนแผงควบคุม ดูได้ที่ SSL/TLS Certificates ของโดเมนใน Plesk และ SSL Certificates ใน DirectAdmin (ดู ติดตั้ง SSL ฟรี Let's Encrypt บน DirectAdmin)
ขั้นตอนที่ 5: ตรวจบน Windows Server
ดูใบรับรองในเครื่องที่ IIS ใช้ด้วย PowerShell
Get-ChildItem Cert:\LocalMachine\My |
Select-Object Subject, NotAfter, Thumbprint |
Sort-Object NotAfter
ถ้าใช้ win-acme ดูรายการงานต่ออายุได้จากเมนูของโปรแกรม และตรวจงานใน Task Scheduler ดูที่ ขอ SSL ฟรีจาก Let's Encrypt บน IIS ด้วย win-acme และ ติดตั้ง SSL Certificate บน IIS
ตรวจสอบผลลัพธ์
- วันหมดอายุจาก
opensslตรงกับที่ Certbot หรือแผงควบคุมแสดง ถ้าไม่ตรง แปลว่า Web Server ยังใช้ใบเก่าอยู่ ต้อง reload Web Server - ทุก Subdomain และทุกพอร์ตที่ให้บริการ (443, 465, 587, 993) ได้ใบรับรองที่ยังไม่หมดอายุ
- สคริปต์หรือระบบแจ้งเตือนส่งข้อความได้จริง ลองตั้ง
WARN_DAYSเป็น 365 ชั่วคราวเพื่อทดสอบ
ปัญหาที่พบบ่อย
ต่ออายุแล้วแต่เบราว์เซอร์ยังเห็นใบเก่า
Web Server ยังไม่ได้โหลดใบใหม่ ให้ sudo systemctl reload nginx หรือ apache2/httpd ถ้าใช้ Certbot ควรตั้ง Deploy Hook ให้ reload อัตโนมัติ บริการอีเมลอย่าง Postfix และ Dovecot ก็ต้อง reload ด้วย
การต่ออายุล้มเหลว
สาเหตุยอดนิยมคือ DNS ของโดเมนไม่ได้ชี้มาที่เซิร์ฟเวอร์นี้แล้ว พอร์ต 80 ถูกปิดทำให้ HTTP-01 Challenge ไม่ผ่าน หรือมี CAA Record ที่ไม่อนุญาต CA นี้ ตรวจ DNS ด้วย ตรวจสอบ DNS ด้วย nslookup และ dig และดู ตั้งค่า CAA Record เพื่อกำหนดผู้ออก SSL Certificate หากเซิร์ฟเวอร์มี Security Group หรือ Firewall ภายนอกจากฝั่งผู้ให้บริการ ให้เปิดพอร์ต 80 เพิ่มด้วย
บางอุปกรณ์แจ้งว่าใบรับรองไม่น่าเชื่อถือ แต่เบราว์เซอร์บนคอมพิวเตอร์ปกติ
มักเป็นเพราะเซิร์ฟเวอร์ไม่ได้ส่ง Intermediate Certificate มาด้วย ตรวจด้วย openssl s_client -connect example.com:443 -servername example.com -showcerts ควรเห็นใบรับรองอย่างน้อยสองใบ บน Nginx ต้องใช้ไฟล์ fullchain.pem ไม่ใช่ cert.pem
Let's Encrypt ไม่ส่งอีเมลเตือนแล้ว
Let's Encrypt หยุดส่งอีเมลเตือนวันหมดอายุตั้งแต่ปี 2025 จึงไม่ควรพึ่งอีเมลจาก CA อีกต่อไป ให้ใช้สคริปต์ในขั้นตอนที่ 3 หรือระบบเฝ้าระวังตาม ตั้งระบบแจ้งเตือนเมื่อเว็บไซต์ล่ม (Uptime Monitoring) ซึ่งส่วนใหญ่ตรวจวันหมดอายุ SSL ได้ด้วย
หากต้องการความช่วยเหลือเรื่องใบรับรอง ติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


