ข้ามไปยังเนื้อหาหลัก

VPS: สร้างใบรับรอง SSL (Let's Encrypt) สำหรับเซิร์ฟเวอร์ Linux

ผลิตภัณฑ์ที่เหมาะสำหรับคู่มือนี้

เริ่มต้นทันที — สั่งซื้อผลิตภัณฑ์ที่เหมาะสมและทำตามคู่มือนี้ทีละขั้นตอน

บทนำ​

ใบรับรอง SSL เป็นส่วนสำคัญของอินเทอร์เน็ต ช่วยให้ข้อมูลถูกส่งอย่างปลอดภัยระหว่างลูกค้าและโฮสต์ ในคู่มือนี้ เราจะพาคุณไปรู้จักกับการตั้งค่าเครื่องมือโอเพ่นซอร์ส Certbot เพื่อขอใบรับรอง SSL ฟรีจากหน่วยงานออกใบรับรองไม่แสวงหากำไร Let's Encrypt

การเตรียมตัว​

เพื่อใช้ Certbot คุณต้องมีเซิร์ฟเวอร์ Linux และ โดเมน ที่คุณเป็นเจ้าของ คุณต้องสามารถเข้าถึงการตั้งค่า DNS ของโดเมนนั้นได้ และ ต้อง สร้างระเบียน DNS แบบ A ชี้ไปยังที่อยู่ IP ของ เซิร์ฟเวอร์ Linux สำหรับโดเมนหลักหรือซับโดเมนที่คุณต้องการใช้งาน

Certbot ยังมีปลั๊กอินเสริมที่ช่วยให้คุณตั้งค่าใบรับรองสำหรับโดเมนได้ง่าย ๆ แบบ "คลิกเดียว" กับเว็บเซิร์ฟเวอร์ต่าง ๆ เช่น Nginx หรือ Apache เราแนะนำให้ใช้ Nginx เพราะเป็นเว็บเซิร์ฟเวอร์โอเพ่นซอร์สที่มีประสิทธิภาพสูงและได้รับความนิยม ดู คู่มือ Linux reverse proxy ของเราเพื่อช่วยตั้งค่านี้

การติดตั้ง​

เริ่มต้นด้วยการติดตั้งแพ็กเกจโอเพ่นซอร์ส Certbot ซึ่งจะใช้ในการขอใบรับรอง SSL ฟรีจาก Let's Encrypt

sudo apt install certbot

เมื่อ Certbot ถูกติดตั้งแล้ว คุณสามารถขอใบรับรองสำหรับโดเมนของคุณได้ Let's Encrypt และ Certbot มีวิธีท้าทาย ACME หลายแบบเพื่อยืนยันความเป็นเจ้าของโดเมน

เราแนะนำให้ใช้วิธี HTTP-01 เป็นค่าเริ่มต้น เพราะรองรับการต่ออายุอัตโนมัติ แต่ถ้าคุณเจอปัญหา คุณสามารถลองใช้วิธี DNS-01 เป็นทางเลือก ซึ่งเป็นแบบแมนนวลและไม่รองรับการต่ออายุอัตโนมัติเพราะต้องยืนยันด้วยระเบียน DNS แบบ TXT

ใช้ปลั๊กอินเว็บเซิร์ฟเวอร์

สำหรับคนที่ใช้เว็บเซิร์ฟเวอร์อย่าง Nginx, Apache หรือเว็บเซิร์ฟเวอร์ของตัวเอง เราแนะนำให้ไปที่หัวข้อ ปลั๊กอินเว็บเซิร์ฟเวอร์ ด้านล่าง ซึ่งจะแสดงวิธีใช้ปลั๊กอิน Certbot เสริมสำหรับเว็บเซิร์ฟเวอร์เหล่านี้ เพื่อการติดตั้งแบบ "คลิกเดียว" และขอใบรับรองโดยไม่ต้องปิดเว็บเซิร์ฟเวอร์

การท้าทาย HTTP-01​

เมื่อ Certbot ถูกติดตั้งแล้ว คุณสามารถขอใบรับรองสำหรับโดเมนของคุณได้ ในตัวอย่างนี้ เราจะใช้โหมด standalone ซึ่งหมายความว่า Certbot จะเริ่มเว็บเซิร์ฟเวอร์ชั่วคราวเพื่อทำการท้าทาย คุณต้องเปิดพอร์ต 80 ในไฟร์วอลล์และไม่มีเว็บเซิร์ฟเวอร์หรือบริการอื่นใดที่ใช้พอร์ต 80 อยู่ เพื่อให้เว็บเซิร์ฟเวอร์ชั่วคราวนี้ทำงานและให้การท้าทาย HTTP สำเร็จ (จึงมีคำว่า HTTP ในชื่อวิธีนี้)

คำสั่งด้านล่างนี้จะใช้พารามิเตอร์ --standalone เพื่อบอก Certbot ว่าคุณต้องการใช้เว็บเซิร์ฟเวอร์ชั่วคราว

# สำหรับโดเมนหลัก
certbot certonly --standalone -d [your_root_domain] -d www.[your_root_domain]

# สำหรับซับโดเมน
certbot certonly --standalone -d [your_domain]

# ตั้งค่าแบบโต้ตอบ
certbot certonly --standalone

หลังรันคำสั่ง คุณอาจต้องทำตามขั้นตอนตั้งค่าแบบโต้ตอบครั้งแรก โดยจะให้กรอกอีเมลสำหรับติดต่อเกี่ยวกับใบรับรอง ตามด้วยตัวเลือกสมัครรับจดหมายข่าว และยอมรับข้อกำหนดและเงื่อนไข

Certbot จะสร้างการท้าทาย ACME และโฮสต์ผ่านเว็บเซิร์ฟเวอร์ชั่วคราว Let's Encrypt จะพยายามดึงข้อมูลนี้จากเซิร์ฟเวอร์ของคุณ และถ้าสำเร็จ ใบรับรองจะถูกสร้างและบันทึกไว้ที่ /etc/letsencrypt/live/[your_domain]

คุณสามารถใช้ใบรับรอง SSL ได้ทุกที่ที่ต้องการโดยระบุเส้นทางภายในเครื่องไปยังใบรับรองเหล่านี้

ระเบียน DNS แบบ TXT​

ถ้าคุณเจอปัญหาในการยืนยันโดเมนด้วยวิธี HTTP-01 คุณสามารถลองใช้วิธี DNS-01 แทน ซึ่งต้องสร้างระเบียน DNS แบบ TXT โดยมีค่าที่ Let's Encrypt ให้มา

อย่างที่บอกไป วิธีนี้ ไม่ รองรับการต่ออายุอัตโนมัติ เว้นแต่คุณจะตั้งระบบจัดการเอง ดังนั้นแนะนำให้ใช้วิธี HTTP-01 เป็นหลัก

คำสั่งด้านล่างนี้จะใช้พารามิเตอร์ --preferred-challenges เพื่อบอก Certbot ว่าคุณต้องการใช้วิธี DNS-01

# สำหรับโดเมนหลัก
certbot certonly --preferred-challenges dns-01 -d [your_root_domain] -d www.[your_root_domain] --manual -m [your_root_domain] -m www.[your_root_domain]

# สำหรับซับโดเมน
certbot certonly --preferred-challenges dns-01 -d [your_domain] --manual -m [your_domain]

# ตั้งค่าแบบโต้ตอบ
certbot certonly --preferred-challenges dns-01

หลังรันคำสั่ง คุณอาจต้องทำตามขั้นตอนตั้งค่าแบบโต้ตอบครั้งแรก โดยจะให้กรอกอีเมลสำหรับติดต่อเกี่ยวกับใบรับรอง ตามด้วยตัวเลือกสมัครรับจดหมายข่าว และยอมรับข้อกำหนดและเงื่อนไข

Certbot จะให้คำแนะนำในการสร้างระเบียน DNS แบบ TXT ที่มีค่าเฉพาะเจาะจง โดยปกติจะเป็น _acme-challenge. ตามด้วยโดเมนของคุณ (เช่น _acme-challenge.zapdocs.example.com) และค่าที่ต้องตั้งจะปรากฏในคอนโซล

เมื่อสร้างระเบียนแล้ว กด Enter เพื่อดำเนินการต่อ ถ้าทุกอย่างถูกต้องและข้อมูล DNS ถูกเผยแพร่ ใบรับรองจะถูกสร้างและบันทึกไว้ที่ /etc/letsencrypt/live/[your_domain]

บันทึก

โปรดใจเย็น ๆ เพราะการเปลี่ยนแปลงระเบียน DNS อาจใช้เวลาสักครู่ในการเผยแพร่ โดยปกติจะใช้เวลาไม่กี่นาที แต่บางครั้งอาจนานกว่านั้น

คุณสามารถใช้ใบรับรอง SSL ได้ทุกที่ที่ต้องการโดยระบุเส้นทางภายในเครื่องไปยังใบรับรองเหล่านี้

ปลั๊กอินเว็บเซิร์ฟเวอร์​

Certbot มีปลั๊กอินเว็บเซิร์ฟเวอร์เสริมหลายตัวที่ช่วยให้การจัดการใบรับรองง่ายขึ้น เพราะปลั๊กอินจะปรับแต่งบล็อกเซิร์ฟเวอร์ที่เกี่ยวข้องให้โดยอัตโนมัติ เพื่อใช้ใบรับรองและเปิดใช้งาน HTTPS (พอร์ต 443) โดยไม่ต้องแก้ไขเอง

วิธีใช้ปลั๊กอินคือเพิ่มพารามิเตอร์ที่เหมาะสมในคำสั่ง certbot ของคุณ

ทั้งสองวิธีนี้ใช้การท้าทาย HTTP-01 และทำงานเหมือนกัน Certbot จะค้นหาบล็อกเซิร์ฟเวอร์ที่มีโดเมนที่ร้องขอในพารามิเตอร์ server_name เมื่อเจอแล้ว Certbot จะสร้างการท้าทาย ACME และเพิ่มบล็อก location /.well-known/acme-challenge/... ชั่วคราวในคอนฟิกเซิร์ฟเวอร์นั้น

Let's Encrypt จะดึงข้อมูลนี้จากเซิร์ฟเวอร์ของคุณ และถ้าสำเร็จ ใบรับรองจะถูกสร้างและคอนฟิกเซิร์ฟเวอร์จะถูกแก้ไขอัตโนมัติเพื่อใช้ HTTPS และใบรับรองใหม่

ปลั๊กอิน Nginx​

ก่อนใช้ปลั๊กอินนี้ ให้แน่ใจว่าติดตั้งแล้ว

sudo apt install python3-certbot-nginx

ใช้ปลั๊กอิน Nginx โดยเพิ่มพารามิเตอร์ --nginx ในคำสั่งของคุณ ดังนี้

# สำหรับโดเมนหลัก
certbot --nginx -d [your_root_domain] -d www.[your_root_domain]

# สำหรับซับโดเมน
certbot --nginx -d [your_domain]

# ตั้งค่าแบบโต้ตอบ
certbot --nginx
เคล็ดลับ

ถ้าคุณไม่ต้องการให้ Certbot ปรับบล็อกเซิร์ฟเวอร์อัตโนมัติแบบ "คลิกเดียว" ให้เพิ่มพารามิเตอร์ certonly เช่น certbot certonly

การต่ออายุอัตโนมัติ​

ในกรณีส่วนใหญ่ Certbot จะตั้งค่าการต่ออายุใบรับรองอัตโนมัติให้ผ่าน cronjob หรือ systemd timer คุณสามารถตรวจสอบได้โดยรันคำสั่งนี้ ซึ่งใช้พารามิเตอร์ --dry-run เพื่อทดสอบกระบวนการ

certbot renew --dry-run
เคล็ดลับ

อย่างที่บอกไป วิธี DNS-01 ไม่รองรับการต่ออายุอัตโนมัติผ่าน Certbot เว้นแต่คุณจะตั้งระบบจัดการเอง ดังนั้นแนะนำให้ใช้วิธี HTTP-01 เป็นหลัก

ถ้าทุกอย่างถูกต้อง คำสั่งนี้จะสำเร็จ หากต้องการดูหรือแก้ไขการต่ออายุอัตโนมัติ คำสั่งจะอยู่ในที่ใดที่หนึ่งใน /etc/crontab/, /etc/cron.*/* หรือผ่าน systemctl list-timers

ตั้งค่า Cronjob ด้วยตัวเอง​

ถ้าการต่ออายุอัตโนมัติยังไม่ถูกตั้งค่า คุณสามารถเพิ่มเองผ่าน cronjob เปิดเมนู crontab ด้วยคำสั่ง crontab -e ถ้าเป็นครั้งแรก คุณอาจถูกถามให้เลือกโปรแกรมแก้ไข ให้เลือกตัวเลือกแรกซึ่งน่าจะเป็น /bin/nano

เมื่อไฟล์เปิดใน nano ให้เพิ่มบรรทัดนี้เพื่อรันการต่ออายุทุกวันตอน 6 โมงเช้าตามเวลาท้องถิ่น

0 6 * * * certbot renew

บันทึกไฟล์และออกจาก nano โดยกด CTRL + X ตามด้วย Y เพื่อยืนยัน และกด ENTER

สรุป​

คุณได้ตั้งค่า Certbot สำหรับโดเมนของคุณสำเร็จผ่านหลายวิธี เช่น standalone, webroot หรือปลั๊กอินต่าง ๆ ทำให้เว็บไซต์ของคุณส่งข้อมูลอย่างปลอดภัยผ่าน HTTPS หากมีคำถามหรือต้องการความช่วยเหลือ ติดต่อทีมซัพพอร์ตของเราได้เลย พร้อมช่วยเหลือทุกวัน! 🙂