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

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