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

เซิร์ฟเวอร์เฉพาะ: สร้างใบรับรอง 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 Challenges หลากหลายแบบเพื่อยืนยันความเป็นเจ้าของโดเมน

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

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

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

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

เมื่อติดตั้ง Certbot แล้ว คุณสามารถขอใบรับรองสำหรับโดเมนของคุณได้ ในตัวอย่างนี้ เราจะใช้โหมด standalone ซึ่งหมายความว่า Certbot จะเริ่มเว็บเซิร์ฟเวอร์ชั่วคราวเพื่อทำการท้าทายนี้ คุณต้องเปิดพอร์ต 80 ในไฟร์วอลล์และไม่มีเว็บเซิร์ฟเวอร์หรือบริการใด ๆ รันอยู่บนพอร์ต 80 เพื่อให้เว็บเซิร์ฟเวอร์ชั่วคราวนี้ทำงานและรับการท้าทายได้ (จึงเป็นที่มาของชื่อ 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 ได้ทุกที่ที่ต้องการโดยระบุเส้นทางภายในเครื่องไปยังใบรับรองเหล่านี้

ระเบียน TXT DNS

ถ้าคุณเจอปัญหาในการยืนยันโดเมนผ่านวิธี 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

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

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 หากมีคำถามหรือขอความช่วยเหลือเพิ่มเติม อย่าลังเลที่จะติดต่อทีมซัพพอร์ตของเรา ซึ่งพร้อมช่วยเหลือคุณทุกวัน! 🙂