ค้นหาเว็บไซต์

วิธีจัดการ SSL ของ Let's Encrypt ด้วยคำสั่ง Certbot


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

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

หลายปีที่ผ่านมา การได้มาซึ่งใบรับรอง SSL หมายถึงต้องจ่ายให้กับหน่วยงานออกใบรับรองทุกปีและต้องผ่านกระบวนการติดตั้งแบบแมนนวลที่น่าเบื่อ แล้ว Let’s Encrypt ก็เกิดขึ้นและเปลี่ยนทุกอย่าง มันเป็นหน่วยงานออกใบรับรองฟรีและอัตโนมัติที่มีวัตถุประสงค์เดียว: เพื่อทำให้การเชื่อมต่อแบบเข้ารหัสเป็นค่ามาตรฐานทั่วทั้งเว็บ

แต่สิ่งที่สำคัญก็คือ: แม้ว่าใบรับรอง Let’s Encrypt จะฟรี แต่จะหมดอายุทุก 90 วัน การจัดการการต่ออายุด้วยตนเองจะเป็นเรื่องยุ่งยาก ซึ่งนี่แหละเหตุผลที่ Certbot มีอยู่ ซึ่งเป็นเครื่องมือบรรทัดคำสั่งที่ทำให้กระบวนการทั้งหมดของการขอ ติดตั้ง และต่ออายุใบรับรอง Let’s Encrypt เป็นไปโดยอัตโนมัติ

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

การติดตั้ง Certbot ในลินุกซ์

กระบวนการติดตั้ง certbot จะแตกต่างกันเล็กน้อยขึ้นอยู่กับการแจกจ่าย Linux ของคุณ แต่โดยรวมแล้วค่อนข้างตรงไปตรงมา

สำหรับระบบที่ใช้ Debian คุณควรตรวจสอบให้แน่ใจก่อนว่าระบบของคุณเป็นเวอร์ชันล่าสุด:

sudo apt update
sudo apt upgrade

จากนั้นติดตั้ง Certbot พร้อมกับปลั๊กอินสำหรับเว็บเซิร์ฟเวอร์ของคุณ หากคุณกำลังใช้ nginx

sudo apt install certbot python3-certbot-nginx

หรือถ้าคุณกำลังใช้ Apache

sudo apt install certbot python3-certbot-apache

สำหรับการแจกแจงที่ใช้ RHEL กระบวนการจะคล้ายกัน แต่ใช้ dnf แทน:

sudo dnf install certbot python3-certbot-nginx    # For Nginx
sudo dnf install certbot python3-certbot-apache   # For Apache

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

การขอใบรับรอง SSL แรกของคุณ

เมื่อ Certbot ถูกติดตั้งแล้ว การขอใบรับรองก็ง่ายอย่างน่าประหลาดใจ

สำหรับเซิร์ฟเวอร์ Nginx คำสั่งจะมีลักษณะดังนี้:

sudo certbot --nginx -d example.com -d www.example.com

หากคุณกำลังใช้ Apache คำสั่งก็แทบจะเหมือนกัน:

sudo certbot --apache -d example.com -d www.example.com

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

หลังจากนั้น Certbot จะเริ่มทำงาน: มันสื่อสารกับ Let’s Encrypt ยืนยันว่าคุณเป็นเจ้าของโดเมน รับใบรับรอง และปรับแต่งการตั้งค่า Nginx ของคุณให้ใช้ HTTPS

ทำความเข้าใจการต่ออายุใบรับรอง SSL

ดังที่ผมได้กล่าวไว้ก่อนหน้านี้ ใบรับรอง Let’s Encrypt จะหมดอายุทุก 90 วัน ดังนั้นจึงจำเป็นต้องตั้งค่ากระบวนการต่ออายุอัตโนมัติ ตัวจับเวลา systemd สามารถจัดการเรื่องนี้ได้โดยตรวจสอบวันละสองครั้งสำหรับใบรับรองใด ๆ ที่กำลังจะหมดอายุ เมื่อใบรับรองมีวันเหลือน้อยกว่า 30 วัน Certbot จะต่ออายุให้โดยอัตโนมัติโดยไม่ต้องมีการแทรกแซงด้วยมือ

คุณสามารถทดสอบกระบวนการต่ออายุนี้ได้โดยไม่ต้องต่ออายุจริง

sudo certbot renew --dry-run

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

เพื่อดูว่าใบรับรองของคุณหมดอายุเมื่อใดและตรวจสอบสถานะการต่ออายุของมัน:

sudo certbot certificates

คุณสามารถตรวจสอบสถานะตัวจับเวลาเพื่อยืนยันว่ามันกำลังทำงานอยู่:

sudo systemctl status certbot.timer

การจัดการใบรับรอง SSL หลายใบ

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

ในการเพิ่มโดเมนใหม่ไปยังใบรับรองที่มีอยู่:

sudo certbot --nginx -d example.com -d www.example.com -d blog.example.com

หากคุณต้องการรับใบรับรองแยกต่างหากสำหรับโดเมนอื่น:

sudo certbot --nginx -d another-domain.com -d www.another-domain.com

แต่ละใบรับรองจะถูกจัดการแยกกัน แต่การต่ออายุทั้งหมดจะเกิดขึ้นโดยอัตโนมัติผ่านกระบวนการต่ออายุเดียวกัน

การต่ออายุใบรับรอง SSL ด้วยตนเอง

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

ในการต่ออายุใบรับรองทั้งหมดที่ถึงกำหนดต่ออายุ ให้รันคำสั่งต่อไปนี้ ซึ่งจะต่ออายุเฉพาะใบรับรองที่กำลังจะหมดอายุใน 30 วันข้างหน้า ส่วนใบรับรองที่เหลือเวลามากกว่า 30 วันจะไม่ได้รับการต่ออายุ

sudo certbot renew

หากคุณต้องการบังคับต่ออายุไม่ว่ากำหนดหมดอายุจะเป็นอย่างไร:

sudo certbot renew --force-renewal

การดูใบรับรอง SSL ของคุณ

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

sudo certbot certificates

ไฟล์ใบรับรองจริงจะอยู่ที่ /etc/letsencrypt/live/ โดยมีไดเรกทอรีแยกต่างหากสำหรับแต่ละใบรับรอง ภายในคุณจะพบลิงก์สัญลักษณ์ไปยังใบรับรองจริง ซึ่งจะมีการจัดเวอร์ชันในไดเรกทอรีเก็บถาวร

เพิกถอนใบรับรอง SSL

หากกุญแจส่วนตัวของใบรับรองถูกเปิดเผย หรือหากคุณไม่ต้องการใช้งานใบรับรองอีกต่อไป คุณควรเพิกถอนใบรับรองนั้น ซึ่งจะบอกเบราว์เซอร์และไคลเอนต์อื่นๆ ทันทีว่าไม่ควรเชื่อถือใบรับรองนั้นอีก แม้ว่ามันยังไม่หมดอายุ

เพื่อเพิกถอนใบรับรอง:

sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem

คุณจะต้องระบุเส้นทางไปยังไฟล์ใบรับรองที่คุณต้องการเพิกถอน

sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem --delete-after-revoke

Certbot จะสื่อสารกับ Let’s Encrypt เพื่อลบใบรับรอง และหากต้องการ สามารถลบไฟล์ในเครื่องได้ด้วย

การลบใบรับรอง SSL โดยไม่เพิกถอน

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

sudo certbot delete --cert-name example.com

สิ่งนี้จะลบไฟล์ใบรับรองออกจากระบบของคุณ แต่จะไม่เพิกถอนใบรับรองกับ Let’s Encrypt ใบรับรองยังคงมีผลถ้าใช้งานที่อื่น แต่ Certbot จะหยุดการจัดการมันบนเซิร์ฟเวอร์นี้

แก้ไขปัญหาการต่ออายุใบรับรอง Certbot

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

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

คุณสามารถตรวจสอบบันทึกการต่ออายุสำหรับข้อความแสดงข้อผิดพลาดเฉพาะได้:

sudo cat /var/log/letsencrypt/letsencrypt.log

บันทึกเหล่านี้แสดงให้เห็นอย่างชัดเจนว่า Certbot พยายามทำอะไรและล้มเหลวตรงไหน ซึ่งมักจะชี้ให้คุณไปยังปัญหาโดยตรง

หากการกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณเกิดขัดข้องบางอย่าง, Certbot บางครั้งสามารถกู้คืนการกำหนดค่าเดิมได้:

sudo certbot --nginx rollback

นี่จะย้อนการเปลี่ยนแปลงที่ทำโดย Certbot แม้ว่าจะไม่ค่อยจำเป็นถ้าคุณใช้ตัวเลือกการตั้งค่าอัตโนมัติ

การทำความเข้าใจข้อจำกัดอัตรา

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

ถ้าคุณกำลังทดสอบหรือเรียนรู้ ให้ใช้แฟล็ก --dry-run อย่างอิสระ ซึ่งจะจำลองกระบวนการทั้งหมดโดยไม่ขอใบรับรองจริง ดังนั้นจะไม่ถูกนับรวมกับขีดจำกัดอัตรา.

sudo certbot renew --dry-run

การอัปเดต Certbot อย่างสม่ำเสมอ

เหมือนซอฟต์แวร์อื่น ๆ Certbot จะได้รับการอัปเดตเพื่อแก้ไขข้อบกพร่องและเพิ่มฟีเจอร์ ดังนั้นจึงเป็นสิ่งสำคัญที่จะต้องอัปเดต certbot ของคุณผ่านตัวจัดการแพ็กเกจปกติของคุณ:

sudo apt update
sudo apt upgrade certbot
ก้าวไปไกลกว่าการใช้งานพื้นฐาน

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

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

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