เซิร์ฟเวอร์เฉพาะ: ตั้งค่า Certbot บน 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 Challenges หลายแบบเพื่อยืนยันความเป็นเจ้าของโดเมน
เราแนะนำให้ใช้วิธี HTTP-01 เป็นค่าเริ่มต้นเพราะรองรับการต่ออายุอัตโนมัติ แต่ถ้าคุณเจอปัญหา คุณสามารถลองใช้วิธี DNS-01 เป็นทางเลือก ซึ่งเป็นแบบแมนนวลและไม่รองรับการต่ออายุอัตโนมัติเพราะต้องยืนยันผ่านระเบียน DNS แบบ TXT
สำหรับคนที่ใช้เว็บเซิร์ฟเวอร์อย่าง Nginx, Apache หรือเว็บเซิร์ฟเวอร์ของตัวเอง เราแนะนำให้ไปที่ส่วน Web Server Plugins ด้านล่าง ซึ่งแสดงวิธีใช้ปลั๊กอิน 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 Challenge และโฮสต์ผ่านเว็บเซิร์ฟเวอร์ชั่วคราว 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 มีปลั๊กอินเว็บเซิร์ฟเวอร์เสริมหลายตัวที่ช่วยให้การจัดการใบรับรองง่ายขึ้น เพราะปลั๊กอินจะปรับแต่งบล็อกเซิร์ฟเวอร์ที่เกี่ยวข้องให้อัตโนมัติ เพื่อใช้ใบรับรองเหล่านี้ แค่เพิ่มพารามิเตอร์ที่เหมาะสมในคำสั่ง certbot
ของคุณ
ทั้งสองวิธีนี้ใช้การท้าทายแบบ HTTP-01 และทำงานเหมือนกัน เมื่อใช้ปลั๊กอิน Certbot จะค้นหาบล็อกเซิร์ฟเวอร์ที่มีโดเมนที่ร้องขอในพารามิเตอร์ server_name
เมื่อเจอแล้ว Certbot จะสร้าง ACME Challenge และเพิ่มบล็อก location /.well-known/acme-challenge/...
ชั่วคราวในคอนฟิกเซิร์ฟเวอร์นั้น
Let's Encrypt จะพยายามดึงข้อมูลนี้จากเซิร์ฟเวอร์ของคุณ และถ้าสำเร็จ ใบรับรองจะถูกสร้างขึ้น และคอนฟิกบล็อกเซิร์ฟเวอร์จะถูกแก้ไขอัตโนมัติเพื่อใช้ HTTPS (พอร์ต 443) พร้อมเส้นทางไปยังใบรับรองใหม่
- Nginx
- Apache
- Webroot
ปลั๊กอิน 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
ปลั๊กอิน Apache
ก่อนใช้ปลั๊กอินนี้ ให้แน่ใจว่าติดตั้งแล้ว
sudo apt install python3-certbot-apache
ใช้ปลั๊กอิน Apache โดยเพิ่มพารามิเตอร์ --apache
ในคำสั่งของคุณ ดังนี้
# สำหรับโดเมนหลัก
certbot --apache -d [your_root_domain] -d www.[your_root_domain]
# สำหรับซับโดเมน
certbot --apache -d [your_domain]
# ตั้งค่าแบบโต้ตอบ
certbot --apache
ถ้าคุณไม่ต้องการให้ Certbot ปรับบล็อกเซิร์ฟเวอร์อัตโนมัติแบบ "คลิกเดียว" ให้เพิ่มพารามิเตอร์ certonly
เช่น certbot certonly
ปลั๊กอิน Webroot
ถ้าคุณรันเว็บเซิร์ฟเวอร์ของตัวเองที่ไม่ใช่ซอฟต์แวร์ทั่วไป คุณอาจอยากใช้วิธี webroot เพื่อใช้เว็บเซิร์ฟเวอร์ของคุณโดยไม่ต้องปิดมัน
ใช้ปลั๊กอิน Webroot โดยเพิ่มพารามิเตอร์ --webroot
ในคำสั่งของคุณ พร้อมกับ -w [your_webserver_path]
(ย่อมาจาก --webroot-path
) ซึ่งเป็นเส้นทางไปยังไดเรกทอรีหลักของเว็บเซิร์ฟเวอร์
# สำหรับโดเมนหลัก
certbot --webroot -w [your_webserver_path] -d [your_root_domain] -d www.[your_root_domain]
# สำหรับซับโดเมน
certbot --webroot -w [your_webserver_path] -d [your_domain]
# ตั้งค่าแบบโต้ตอบ
certbot --webroot -w [your_webserver_path]
ตำแหน่ง webroot ที่พบบ่อยที่สุดคือ /var/www/html
คุณยังสามารถใช้วิธีนี้กับเว็บเซิร์ฟเวอร์อย่าง Nginx หรือ Apache ในกรณีที่คุณต้องการใช้เว็บเซิร์ฟเวอร์โดยไม่ให้ปลั๊กอินปรับบล็อกเซิร์ฟเวอร์อัตโนมัติแบบ native
การต่ออายุอัตโนมัติ
ในกรณีส่วนใหญ่ 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 หากมีคำถามหรือขอความช่วยเหลือเพิ่มเติม อย่าลังเลที่จะติดต่อทีมซัพพอร์ตของเรา ซึ่งพร้อมช่วยเหลือคุณทุกวัน! 🙂