การออกใบรับรอง CA ให้กับ Ubuntu 22.04
การออกใบรับรอง CA ให้กับ Ubuntu 22.04 หรือการใช้ Let’s Encrypt บน Ubuntu 22.04 Let’s Encrypt คือผู้ออกใบรับรอง (Certificate Authority หรือ CA) ให้เราสามารถใช้งาน HTTPS เพื่อเข้ารหัสบนเว็บเซิร์ฟเวอร์ของเรา ช่วยจัดการในการติดตั้ง TLS/SSL ฟรี โดยดำเนินการผ่านทางตัวซอฟแวร์ที่เรียกว่า Certbot ในการติดตั้งนั้นสามารถติดตั้งใบรับรองได้ทั้ง Apache และ Nginx
แต่สำหรับในบทความนี้ แนะนำการติดตั้งเพื่อใช้งานออกใบรับรองให้กับ apache โดยใช้ Certbot
การติดตั้ง Certbot
ในการรับ ใบรับรอง SSL จาก Let’s Encrypt นั้น เราต้องติดตั้ง Certbot บน Server เราก่อน โดยใช้แหล่งข้อมูลแพ็คเก็ตของ Ubuntu สำหรับติดตั้ง
เริ่ม จากใช้คำสั่ง update ก่อน เพื่อสร้างสารบัญแพ็คเก็ต
sudo apt update
ต้องติดตั้ง 2 แพ็คเก็ต คือ certbot
, and python3-certbot-apache
แพ็คเก็ตตัวหลังคือตัวปลักอินที่จะช่วยให้ Certbot และ Apache สามารถออกใบรับรองและกำหนดค่า HTTPS ภายใน Server ได้ในขั้นตอนเดียวโดยใช้คำสั่ง
sudo apt install certbot python3-certbot-apache
หลังจากติดตั้ง Certbot บน Server เสร็จ ขั้นตอนต่อไปคือการการตรวจสอบการกำหนดค่าหรือการปรับแต่งค่าใน Apache ว่าการสร้างโอสต์เสมือนของเรามีถูกต้องหรือไม่อย่างไร เพื่อให้มั่นใจว่า สคริปต์ของ Certbot ที่เราติดตั้งรู้จักกับโดเมนของเราและรับรู้ค่าใหม่เพื่อออกไปรับรอง SSL
การตรวจสอบ Apache Virtual Host Configuration
การตรวจสอบค่า วิชวลโอสต์ของเรา ดูได้จากบทความที่ผ่านมา ในเรื่องการสร้าง virtual Host
หากเราปรับแต่งเสร็จแล้วไม่ต้องดำเนินการอะไรเพิ่มเติม แต่หากเรายังไม่ได้ปรับแต่งให้กลับไปปรับแต่งให้ถูกต้อง โดยให้ดู 2 ส่วนคือ
ServerName กับ ServerAlias
เปิดค่าให้ HTTPS ผ่านทางไฟล์วอลได้
ส่วนนี้ไม่มีอะไรมากแค่เปิดใช้งาน ให้ https วิ่งผ่านไฟล์วอลได้
sudo ufw status;
sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'
sudo ufw status
การรับใบรับรอง SSL
Certbot มีรูปแบบในการออกใบรับรองได้หลายวิธีมาก โดยการสร้างใบรับรอง SSL ผ่านทาง Plugin
อีกทางเลือกหนึ่งคือการใช้ ปลักอินของ Apache ที่จะช่วยในการกำหนดค่าและเรียกค่าใหม่ทุกคร้้งเมื่อจำเป็น โดยการใช้คำสั่งนี้
sudo certbot --apache
ในระหว่างที่สคริปต์กำลังทำงาน จะมีคำถามต่างๆๆ มาให้เราตอบตลอดเวลา ให้ค่อยตอบคำถามต่างๆ เพื่อให้การกำหนดค่า SSL เป็นไปอย่างถูกต้อง
อย่างคำถามแรก เกี่ยวกับ Email ให้เรากรอกรายละเอียดหรือไม่กรอกก็ได้ แต่แนะนำว่าให้กรอกและให้ใช้เมล์ที่เราอ่านตลอด เพราะเราสามารถรับข่าวสารต่างๆๆ ได้ เช่น เมื่อมีการแจ้งเตือนเกี่ยวกับการต่ออายุหรือเกี่ยวกับความปลอดภัย
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): you@your_domain
หลังจากที่กำหนด Email แล้ว ขั้นตอนต่อไปคือ การยืนยัน ให้กดตกลง
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
เป้นคำถามเกี่ยวกับการแบ่งปัน Email เพื่อรับเนื้อหาหรือข่าวสารต่าง ๆๆ หากไม่ต้องการให้กด N
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
ในขั้นตอนต่อมา เป็นการแจ้งว่าต้องการจะให้เปิดการใช้งานสำหรับชื่อ โดเมน ชื่ออะไร โดยค่านี้จะเข้าไปอ่านจากการกำหนดค่าใน virtual Hosting ดังนั้นในขั้นตอนที่ผ่านมาในไฟล์คอนฟิก Apache เราต้องกำหนดให้เรียบร้อยก่อน ทั้ง ServerName และ ServerAlias
ในขั้นตอนนี้ มีตัวเลือกอยู่ 2 อย่าง คือแบบไม่ต้องพิมพ์ ชื่อโอสต์ กับพิมพ์ชื่อโอสต์ว่า www
แต่เราสามารถเลือกตั้งหมดได้ โดยการกด Enter ผ่านไปเลยได้
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
หลังจากที่เรากำหนดขั้นตอนต่างๆๆ ตามที่ระบบแจ้งมาให้จัดการเรียบร้อยแล้ว การปรับแต่ง Certbot เป้นอันว่าเสร็จเรียบร้อย
จะมีข้อความแจ้งรายละเอียดเกี่ยวกับใบรับรอง โดยบอกสถานที่บันทึกและคีย์ที่บันทึกไว้ พร้อมบอกรายละเอียดอื่นๆๆ เป็นอันว่าเสร็จเรียบร้อยในการสร้างในรับรอง CA
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-07-10.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf
Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ในตอนนี้ หากเราเปิดเว็บไซต์ของเราด้วยคำสั่ง https:// สังเกตุจะมีเครื่องหมายระบบความปลอดภัยเกิดขึ้น จะเป็นรูปล็อกกุญแจที่ address bar
หากต้องการทดสอบว่า มีความปลอดภัยระดับไหน อย่างไร รวมทั้งรายละเอียดต่างๆๆ สามารถเข้าไปทดสอบได้ที่ SSL Labs Server Test
สำหรับขั้นตอนต่อไปจะเป็นการทดสอบคุณสมบัติการต่ออายุของ Certbot เพือเป็นการยืนยันว่าใบรับรองของเราจะได้รับการต่ออายุอัตโนมัติ ก่อนวันหมดอายุ (ใบรับรองใช้ได้ 90 วัน ต่อครั้ง)
ตรวจสอบว่า Certbot มีการต่ออายุอัตโนมัติหรือไม่
เวลาของใบรับรองที่ออกให้โดย Let’s Encrypt ใช้ได้ในแต่ละครั้งแค่ 90 วัน ดังนั้น จะมีวิธีการที่จะให้มีการต่ออายุใบรับรองอัตโนมัติ
การตรวจสอบสถานะที่ให้บริการในการต่ออายุอัตโนมัติ และเพื่อให้แน่ใจว่ามีการทำงานของสคริดต์ สามารถตรวจสอบได้ตามคำสั่งข้างล่าง
(ลืมบอกไปนิด แพ็คเก็ตชอง Certbot ที่เราติดตั้งจะดูแลในการการต่ออายุโดยใช้สคริป ใน /etc/cron.d โดยงานบริการดังกล่าวเรียกว่า Certbot.time จะเรียกกันทำงานวันละ 2 ครั้ง)
sudo systemctl status certbot.timer
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:>
Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago
Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left
Triggers: ● certbot.service
Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.
To test the renewal process, you can do a dry run with certbot
:
sudo certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for your_domain and www.your_domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/your_domain/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
หากใช้คำสั่งดังกล่าวแล้วไม่แจ้ง ข้อผิดพลาดอะไรออกมา เท่ากับว่าระบบพร้อมที่จะทำงาน เมื่อมีความจำเป็น Certbot จะต้องอายุใบรับรองของเรา โดยอัตโนมัติ แต่หากมีข้อผิดพลาดอะไร เราจะได้รับเมล์ที่เราแจ้งไป เพื่อเตือนให้เราเข้าไปแก้ไขหรือต่ออายุด้วยตนเอง
สรุป
วิธีการนี้ เป็นวิธีการที่ค่อนข้างจะง่าย และฟรี การปรับแต่งอาจจะมีรายละเอียดมากกว่านี้ แล้วแต่ว่า เราต้องการแบบไหน แต่เท่าที่ทดลองมาแบบนี้ค่อนข้างจะง่ายและไม่ยุ่งยากเลยใช้วิธีการนี้มาตลอด
ส่วนรายละเอียดต่างๆๆ สามารถอ่านรายละเอียดเพิ่มเติมได้จากข้อมูลที่อ้างอิงในการจัดทำบทความนี้ เป็นบทความที่อ้างอิงจากผู้ให้บริการ Cloud Server ที่มีชื่อว่า DigitalOcean ซึ่งเป็นพื้นที่ในการจัดทำหรือซื้อหามาใช้ได้ในราคาที่ไม่แพง รวมทั้งยังสามารถปรับแต่งค่าต่างๆๆ ได้สะดวก โดยไม่ต้องใช้งานผ่านทาง Control panal