วิธีจัดการ 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 เปลี่ยนกระบวนการที่เคยซับซ้อนและมีโอกาสเกิดข้อผิดพลาดให้กลายเป็นเพียงไม่กี่คำสั่งง่าย ๆ ที่ใช้งานได้จริง