คำตอบสั้น ๆ: ใช้ win-acme ขอ SSL Certificate ฟรีจาก Let's Encrypt ให้เว็บไซต์บน IIS สร้าง HTTPS Binding และตั้งการต่ออายุอัตโนมัติผ่าน Scheduled Task บน Windows Server
คู่มือนี้อธิบาย win-acme ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
Let's Encrypt เป็นผู้ออก SSL Certificate ฟรีที่เบราว์เซอร์ทุกตัวเชื่อถือ ใบรับรองมีอายุสั้น (ปัจจุบัน 90 วัน และ Let's Encrypt ประกาศแผนจะลดอายุลงอีก) จึงต้องต่ออายุอัตโนมัติ บน Linux มักใช้ Certbot ส่วนบน Windows Server ที่ใช้ IIS เครื่องมือที่นิยมที่สุดคือ win-acme (ไฟล์ wacs.exe) ซึ่งเป็นโปรแกรมโอเพนซอร์สที่ขอใบรับรอง สร้าง HTTPS Binding ใน IIS และสร้าง Scheduled Task สำหรับต่ออายุให้ครบในขั้นตอนเดียว
บทความนี้ใช้วิธีตรวจสอบโดเมนแบบ HTTP (http-01) ซึ่งเหมาะกับเว็บไซต์ทั่วไปที่ชี้โดเมนมาที่เซิร์ฟเวอร์แล้ว
สิ่งที่ต้องเตรียม
- Windows Server 2019 หรือ 2022 ที่ติดตั้ง IIS ตาม ติดตั้ง IIS Web Server บน Windows Server และบัญชีในกลุ่ม Administrators
- เว็บไซต์ใน IIS ที่มี Binding แบบ http พอร์ต 80 พร้อม Host name เช่น
example.comและwww.example.comเพราะ win-acme ใช้ Host name ใน Binding เป็นรายชื่อโดเมนที่จะขอ - A Record ของทุกชื่อชี้มาที่ IP ของเซิร์ฟเวอร์แล้ว ตรวจด้วยวิธีใน ตรวจสอบ DNS ด้วย nslookup และ dig
- พอร์ต 80 และ 443 เปิดใน Windows Defender Firewall ตาม เปิด Port บน Windows Defender Firewall หากเซิร์ฟเวอร์มี Security Group หรือ Firewall ภายนอกจากฝั่งผู้ให้บริการ ให้เปิดพอร์ตนั้นเพิ่มด้วย
หมายเหตุ: พอร์ต 80 ต้องเปิดให้ทุก IP เข้าถึงได้ตลอดเวลา ไม่ใช่เฉพาะตอนขอครั้งแรก เพราะเซิร์ฟเวอร์ของ Let's Encrypt ต้องเข้ามาตรวจทุกครั้งที่ต่ออายุ ถ้าเว็บไซต์อยู่หลัง Cloudflare แบบ Proxy ดูข้อควรระวังใน เลือก SSL/TLS Mode บน Cloudflare ให้ถูกต้อง
ขั้นตอนที่ 1: ดาวน์โหลดและแตกไฟล์ win-acme
- ดาวน์โหลดจากเว็บไซต์ทางการ win-acme.com (หรือหน้า Releases ของโครงการบน GitHub) เลือกไฟล์รุ่นล่าสุดแบบ x64 trimmed ซึ่งเพียงพอสำหรับ IIS
- สร้างโฟลเดอร์ถาวร เช่น
C:\Tools\win-acmeแล้วแตกไฟล์ zip ลงไป อย่าแตกไว้ใน Downloads หรือโฟลเดอร์ชั่วคราว เพราะ Scheduled Task ที่สร้างขึ้นจะชี้มาที่ตำแหน่งนี้ ถ้าย้ายหรือลบทิ้ง การต่ออายุจะหยุดทำงาน - ถ้า Windows บล็อกไฟล์ที่ดาวน์โหลดมา ให้คลิกขวาที่ไฟล์ zip ก่อนแตก เลือก Properties แล้วเลือก Unblock
ขั้นตอนที่ 2: รัน wacs.exe และขอใบรับรอง
คลิกขวาที่ wacs.exe แล้วเลือก Run as administrator หรือเปิด PowerShell แบบ Administrator แล้วรัน
cd C:\Tools\win-acme
.\wacs.exe
โปรแกรมเป็นเมนูแบบข้อความ ข้อความและตัวอักษรของเมนูอาจต่างกันเล็กน้อยตามเวอร์ชัน ลำดับโดยทั่วไปเป็นดังนี้
- เลือก N: Create certificate (default settings) ซึ่งใช้ Source เป็น IIS ตรวจแบบ http-01 และติดตั้ง Binding ให้
- โปรแกรมแสดงรายชื่อเว็บไซต์ใน IIS ที่มี Host name ให้พิมพ์หมายเลขของเว็บไซต์ที่ต้องการ
- โปรแกรมแสดงรายชื่อ Binding ของเว็บไซต์นั้น ให้กด Enter เพื่อเลือกทั้งหมด หรือพิมพ์หมายเลขเฉพาะชื่อที่ต้องการ คั่นด้วยจุลภาค
- ยืนยันรายชื่อโดเมนที่จะอยู่ในใบรับรอง
- ครั้งแรกจะถามอีเมลและให้ยอมรับข้อตกลงการใช้งาน (Terms of Service) ของ Let's Encrypt
ถ้าสำเร็จจะเห็นข้อความประมาณว่าตรวจสอบโดเมนผ่าน (Authorization result: valid) ติดตั้งใบรับรองลงใน Certificate Store สร้างหรืออัปเดต Binding แบบ https และบอกวันที่จะต่ออายุครั้งถัดไป
ถ้าต้องการใบรับรองแบบ Wildcard (*.example.com) ต้องใช้การตรวจแบบ DNS (dns-01) ผ่านเมนู M: Create certificate (full options) ซึ่งต้องเพิ่ม TXT Record ที่ DNS ของโดเมน หรือใช้ปลั๊กอินของผู้ให้บริการ DNS รายละเอียดดูที่ เอกสาร DNS validation ของ win-acme
ขั้นตอนที่ 3: ตรวจ Scheduled Task สำหรับต่ออายุ
win-acme สร้าง Task ใน Task Scheduler ชื่อขึ้นต้นด้วย win-acme renew ซึ่งรันทุกวัน และต่ออายุใบรับรองเมื่อถึงกำหนด (ค่าเริ่มต้นประมาณ 55 วันหลังออกใบรับรอง) ตรวจสอบได้ด้วย PowerShell
Get-ScheduledTask | Where-Object TaskName -like "win-acme*" | Get-ScheduledTaskInfo
ผลลัพธ์แสดง LastRunTime, LastTaskResult และ NextRunTime ค่า LastTaskResult เป็น 0 หมายถึงรันสำเร็จ (รายละเอียดการใช้ Task Scheduler ดูที่ ตั้งเวลาให้งานทำงานอัตโนมัติด้วย Task Scheduler บน Windows Server)
ข้อมูลการตั้งค่าและรายการใบรับรองที่ win-acme ดูแลอยู่เก็บที่ C:\ProgramData\win-acme\ ส่วน Log อยู่ในโฟลเดอร์ย่อย Log ของโฟลเดอร์เดียวกัน ควรรวมโฟลเดอร์นี้ไว้ในแผนสำรองข้อมูลของเซิร์ฟเวอร์