การขอและจัดการใบรับรอง SSL อัตโนมัติผ่าน Let's Encrypt ใน ServBay
ในการพัฒนาเว็บยุคใหม่ การจำลองสภาพแวดล้อมเหมือน production บนเครื่อง local เป็นสิ่งสำคัญ รวมถึงการใช้งาน HTTPS ด้วย ServBay รองรับโปรโตคอล ACME (Automated Certificate Management Environment) ซึ่งช่วยให้คุณสามารถขอ ติดตั้ง และจัดการใบรับรอง SSL/TLS ฟรีจาก CA (Certificate Authority) อย่าง Let's Encrypt ได้โดยอัตโนมัติ บทความนี้จะแนะนำขั้นตอนอย่างละเอียดในการขอใบรับรองจาก Let's Encrypt ใน ServBay และนำไปใช้กับเว็บไซต์ local ของคุณ
ประโยชน์ของการใช้ใบรับรอง Let's Encrypt ได้แก่: ฟรี, อัตโนมัติ, ได้รับการยอมรับจากเบราว์เซอร์หลัก ๆ และเหมาะสำหรับการทดสอบเว็บ local ด้าน HTTPS, Service Workers, HSTS และฟีเจอร์ต่าง ๆ ที่เกี่ยวข้อง
ข้อกำหนดเบื้องต้น
ก่อนเริ่มขอใบรับรอง Let's Encrypt กรุณาตรวจสอบว่าคุณมีเงื่อนไขต่อไปนี้ครบถ้วน:
- มีชื่อโดเมนสาธารณะ: คุณต้องมีชื่อโดเมนที่จดทะเบียนและใช้งานได้จริง (เช่น
servbay.demo
หรือyourdomain.com
) Let's Encrypt ไม่สามารถออกใบรับรองให้กับ local IP หรือโดเมนที่ไม่ใช่ public เช่น.local
- สามารถจัดการค่า DNS ของโดเมน: ServBay ใช้ DNS API เพื่อตรวจสอบความเป็นเจ้าของโดเมน คุณต้องเข้าใช้งานหน้าควบคุมของผู้ให้บริการโดเมนหรือ DNS ได้ (ตัวอย่างเช่น Cloudflare, GoDaddy, AWS Route 53 เป็นต้น) และสร้าง API key สำหรับใช้งานอัตโนมัติ
- มี DNS API Key: สร้าง API key หรือ token ตามวิธีของผู้ให้บริการ DNS ของคุณ วิธีการขอ API key จะแตกต่างกันในแต่ละผู้ให้บริการ โดยปกติควรมีสิทธิในการจัดการ DNS record สามารถดูวิธีการของแต่ละผู้ให้บริการและชื่อ environment variable ที่ต้องใช้ได้จาก DNS API WIKI ของโปรเจกต์ acme.sh
ขั้นตอนการขอใบรับรอง
ทำตามขั้นตอนดังนี้เพื่อขอใบรับรอง SSL ใน ServBay ผ่าน Let's Encrypt:
เปิดแผงควบคุม ServBay: เริ่มต้นแอป ServBay จากนั้นคลิกไอคอนที่ menu bar เลือก "แผงควบคุม" (Manager Panel) เพื่อเข้าสู่ Web interface
ไปที่หน้าจัดการ SSL Certificate: ใน sidebar ของแผงควบคุม ServBay เลือกเมนู
SSL Certificates
เริ่มขอใบรับรองใหม่: ที่หน้าแสดงรายการ SSL certificate คลิกปุ่ม “+” ที่มุมขวาบน จะมีหน้าต่างสำหรับกำหนดค่าการขอใบรับรองปรากฏขึ้น
กรอกข้อมูลสำหรับใบรับรอง: ในหน้าต่าง "Request Certificate" (ขอใบรับรอง) ให้กรอกรายละเอียดดังนี้:
- Common Name (ชื่อหลัก): ตั้งชื่อเพื่อระบุใบรับรองนี้ เช่น
servbay-demo-cert
หรือmydomain-wildcard-cert
เพื่อให้ง่ายต่อการจดจำ - Usage Purpose (วัตถุประสงค์): เลือก
TLS/SSL
- Request Method (วิธีขอรับ): เลือก
ACME
- Issuer (ผู้ออกใบรับรอง): เลือก
Let's Encrypt
- DNS API Provider (ผู้ให้บริการ DNS API): เลือกผู้ให้บริการ DNS หรือโดเมนของคุณจาก dropdown (เช่น:
cloudflare
คือ Cloudflare,godaddy
คือ GoDaddy) - Algorithm (อัลกอริทึม): แนะนำให้เลือก
ECC
(Elliptic Curve Cryptography) และกำหนดความยาวคีย์384
ECC ให้ขนาดคีย์เล็ก ปลอดภัยและประสิทธิภาพดีขึ้นกว่า RSA - E-Mail Address (อีเมล): กรอกอีเมลที่ใช้งานได้จริง Let's Encrypt จะส่งการแจ้งเตือนสำคัญเกี่ยวกับใบรับรองมายังอีเมลนี้
- DNS API Tokens (โทเค็น DNS API): กรอก API key หรือ token ที่รับมาจากผู้ให้บริการ DNS มักจะเป็น environment variable สำหรับ ACME client ดูรายละเอียดและชื่อ variable ได้จากคู่มือของผู้ให้บริการ DNS หรือจาก [acme.sh DNS API WIKI] อย่าลืม ไม่ต้องใส่คำว่า
export
นำหน้า เช่นของ Cloudflare อาจจะเป็นCF_Key=sdfsdfsdffgfdg\[email protected]
(ใช้\n
แยกแต่ละค่า) - Domain (โดเมน): กรอกโดเมนที่ต้องการขอใบรับรอง หากหลายโดเมนหรือใบรับรอง wildcard ให้คั่นด้วย comma (,) ตัวอย่าง
servbay.demo, www.servbay.demo, *.servbay.demo
การขอ wildcard domain ต้อง ใช้วิธี DNS API ในการยืนยันเท่านั้น
หมายเหตุ: ตัวอย่างชื่อ Common Name ในภาพคือ Test แนะนำให้ตั้งชื่อที่สื่อความหมายตามการใช้งานจริง
- Common Name (ชื่อหลัก): ตั้งชื่อเพื่อระบุใบรับรองนี้ เช่น
ส่งคำขอ: ตรวจสอบข้อมูลให้ถูกต้อง จากนั้นคลิกปุ่ม “Request” (ขอใบรับรอง) ด้านล่าง
รอการดำเนินการ: ServBay จะเรียกใช้งาน ACME client พร้อมข้อมูล DNS API ที่ให้ไว้ เพื่อยืนยันความเป็นเจ้าของโดเมนและขอใบรับรองจาก Let's Encrypt ขั้นตอนนี้ใช้เวลาตามความเร็วในการอัปเดต DNS records และการตอบสนองของ Let's Encrypt เมื่อสำเร็จใบรับรองจะปรากฏในรายการในแผงจัดการ SSL Certificates
การใช้งานใบรับรอง
เมื่อขอใบรับรองสำเร็จและปรากฏในรายการแล้ว สามารถนำไปใช้กับเว็บไซต์ local ได้ดังนี้:
- ไปที่เมนูตั้งค่าเว็บไซต์: ใน sidebar ของแผงควบคุม ServBay เลือกเมนู
Websites
- แก้ไขการตั้งค่าเว็บไซต์: เลือกเว็บไซต์ที่ต้องการใช้งานใบรับรอง แล้วคลิกปุ่มแก้ไข (สัญลักษณ์ดินสอ)
- กำหนดค่าการใช้งาน HTTPS/SSL: ค้นหาตัวเลือกที่เกี่ยวข้องกับ SSL/HTTPS ในหน้าตั้งค่า มักจะมีช่องให้เลือกแหล่งที่มาของใบรับรอง
- เลือกใบรับรอง ACME: ในตัวเลือกแหล่งที่มาให้เลือก
ACME
จากนั้นเลือกใบรับรองที่เพิ่งขอไว้ (สังเกตได้จากชื่อ Common Name) - บันทึกการตั้งค่า: บันทึกการเปลี่ยนแปลง ServBay จะ reload การตั้งค่าเว็บไซต์โดยใช้ใบรับรอง SSL ใหม่ ขณะนี้เว็บไซต์ของคุณบน local จะเข้าใช้งานผ่าน HTTPS ได้
ตัวอย่างหน้าเลือกใบรับรอง ACME ในหน้าตั้งค่าเว็บไซต์
การต่ออายุใบรับรอง
ใบรับรอง Let's Encrypt มีอายุ 90 วัน ServBay มีระบบต่ออายุอัตโนมัติ เมื่อใบรับรอง ACME ของคุณใกล้หมดอายุ (ประมาณ 30 วันก่อนหมดอายุ) ServBay จะพยายามต่ออายุให้โดยอัตโนมัติ โดยใช้ configuration เดิมทั้งหมด คุณไม่จำเป็นต้องดำเนินการเอง กรุณาตรวจสอบว่า DNS API Key ที่ใช้ยังมีผล เพื่อให้ฟีเจอร์อัตโนมัติทำงานได้ราบรื่น หากมีปัญหาระหว่างต่ออายุ Let's Encrypt จะส่งอีเมลแจ้งไปยัง email ที่กำหนดในขั้นตอนขอใบรับรอง
เกี่ยวกับโปรโตคอล ACME และการยืนยัน DNS API
- โปรโตคอล ACME: มาตรฐานเปิดที่ใช้ในการตรวจสอบโดเมนและออกใบรับรองโดยอัตโนมัติ CA เช่น Let's Encrypt ใช้สื่อสารกับ client (เช่น ACME client ของ ServBay) เพื่อให้ขอใบรับรองและจัดการอัตโนมัติ
- DNS API Verification: วิธีคอนเฟิร์มความเป็นเจ้าของโดเมน ด้วยการใช้ API ไปตั้ง TXT record เฉพาะใน DNS ของโดเมนของคุณ จากนั้น CA server จะตรวจสอบข้อมูล record นี้ วิธีนี้เหมาะอย่างยิ่งกับกรณีต่อไปนี้:
- ขอ wildcard certificate (เช่น
*.servbay.demo
) - กรณี ServBay instance ของคุณไม่สามารถ access ได้จาก public (เช่น อยู่ใน Intranet หรือ ISP ปิดกั้น port 80/443)
- ขอ wildcard certificate (เช่น
การเลือกอัลกอริทึม: ECC vs RSA
ในขั้นตอนขอใบรับรอง ServBay อนุญาตให้เลือก ECC หรือ RSA
- RSA: อัลกอริทึมการเข้ารหัสสาธารณะแบบดั้งเดิม มีความเข้ากันได้สูงกับทุกเบราว์เซอร์และ client ทั่วไป ขนาดคีย์ที่นิยมคือ 2048, 4096 บิต
- ECC: อัลกอริทึม elliptic curve ขนาดคีย์สั้นกว่าแต่ปลอดภัยเทียบเท่า (ECC 256 บิต เทียบเท่า RSA 3072 บิต) ส่งผลให้ TLS handshake เร็วขึ้น ประหยัดทรัพยากร server/ client เบราว์เซอร์และ OS สมัยใหม่รองรับ ECC ได้ดี
คำแนะนำ: สำหรับการขอใบรับรองใหม่แนะนำใช้ ECC และคีย์ความยาว 384 เพื่อประสิทธิภาพและความปลอดภัย หากต้องการรองรับ clients เก่าที่สุดอาจเลือก RSA
ข้อควรระวัง
- เวลาเผยแพร่ DNS: หลังกรอกคำขอ DNS TXT record อาจใช้เวลาตั้งแต่ไม่กี่นาทีจนถึงหลายชั่วโมงจึงจะเผยแพร่ทั่วโลก หากขอใบรับรองไม่ผ่านทันที ให้ลองใหม่ภายหลัง
- ความปลอดภัยของ API Key: API Key สำหรับ DNS สามารถจัดการ DNS record ได้ จึงควรเก็บเป็นความลับอย่างเคร่งครัด
- ขีดจำกัด Rate Limit ของ Let's Encrypt: Let's Encrypt กำหนด limit การขอใบรับรอง หากขอ/ต่ออายุบ่อยในโดเมนเดียวกัน อาจถูกจำกัด สำหรับการใช้งานปกติที่ใช้ auto renewal ของ ServBay จะไม่กระทบ
คำถามที่พบบ่อย (FAQ)
- ถาม: โดเมนของฉันชี้ IP มาที่ local ใช้ Let's Encrypt ได้ไหม?
- ตอบ: ได้ หากใช้วิธียืนยันผ่าน DNS API เพราะ Let's Encrypt ตรวจสอบสิทธิใน DNS ไม่ได้ตรวจสอบว่าชี้ไปที่ public IP หรือไม่
- ถาม: ขอใบรับรองไม่ผ่านควรทำอย่างไร?
- ตอบ: ตรวจสอบความถูกต้องของ DNS API Key ว่าตรงตามสิทธิและ provider หรือไม่ ตรวจสอบ DNS API Provider ที่เลือก และรอ propagation ของ DNS หากทั้งหมดถูกต้อง ลองตรวจสอบ log ของ ServBay เพื่อดูรายละเอียด
- ถาม: ServBay จะต่ออายุใบรับรองกี่วันก่อนหมดอายุ?
- ตอบ: โดยทั่วไป ServBay จะพยายามต่ออายุในช่วง 30 วันก่อนหมดอายุ
- ถาม: สามารถขอใบรับรองให้โดเมน
.local
ได้หรือไม่?- ตอบ: ไม่ได้ Let's Encrypt รองรับเฉพาะ public domain สำหรับ
.local
หรือ IP ในเครื่อง ให้ใช้ฟีเจอร์ ServBay User CA หรือ ServBay Public CA เพื่อสร้าง self-signed หรือCA ปลอม สำหรับ local test
- ตอบ: ไม่ได้ Let's Encrypt รองรับเฉพาะ public domain สำหรับ
- ถาม: หาก DNS provider ไม่อยู่ในรายชื่อ ServBay ต้องทำอย่างไร?
- ตอบ: ACME client ที่ integrated มากับ ServBay รองรับผู้ให้บริการ DNS หลัก ๆ เกือบทั้งหมด หาก provider ของคุณเฉพาะกลุ่มมาก อาจต้องตั้งค่าด้วยตนเอง ตรวจสอบวิธีที่ [acme.sh DNS API WIKI] และหากไม่มีใน UI ของ ServBay อาจต้องติดต่อฝ่ายสนับสนุนของ ServBay
สรุป
ServBay ทำให้การขอและจัดการใบรับรอง SSL จาก Let's Encrypt ในสภาพแวดล้อม Local ง่ายและรวดเร็วผ่าน ACME protocol เมื่อใช้ DNS API จะสามารถขอ certificate สำหรับทุกโดเมน public (รวมทั้ง wildcard) แถมยังต่ออายุอัตโนมัติ ช่วยให้คุณจำลอง production ได้สมจริงและปลอดภัยมากขึ้นสำหรับการพัฒนาและทดสอบ เพียงทำตามขั้นตอนในบทความนี้ก็พร้อมเปิดใช้งาน HTTPS สำหรับเว็บไซต์ ServBay ของคุณในทันที