จากโพสอื่นๆใน Series LAMP Web Server on Ubuntu เมื่อลงเว็บเซิฟเวอร์และสร้าง Virtual host แล้ว ขั้นตอนต่อไปในโพสนี้จะอธิบายวิธีการใช้ Let’s Encrypt เพื่อลง SSL Certificate สำหรับเว็บเซิฟเวอร์ เพื่อให้ใช้งานเว็บไซต์ผ่าน https ได้นั่นเอง
สิ่งที่ต้องเตรียมก่อนเริ่มลง Let’s Encrypt
- ลง LAMP Web server ดูวิธีได้ในโพส วิธีลง LAMP Stack (Apache, MySQL, PHP) ไปยัง Ubuntu บน EC2
- มีชื่อโดเมนที่ชี้ไปยังเซิฟเวอร์ดังกล่าว
- สร้าง Virtual Host ดูวิธีได้ในโพส ตั้งค่า Virtual Host ใน Apache เพื่อใช้งาน Domain และ SSL บน Ubuntu
เริ่มต้นเปิดใช้งาน SSL และลง Let’s Encrypt
Step 1: เปิดการใช้งาน mod SSL ด้วยคำสั่ง
sudo a2enmod ssl
หากในเซิฟเวอร์มีเปิด Firewall อยู่ จะต้องทำการ Allow port เว็บ (80, 443) เสียก่อนจึงจะสามารถเข้าถึงเว็บไซต์บนเซิฟเวอร์ได้ เช่น กรณีไฟร์วอล์ ufw สามารถเพิ่มพอร์ทที่อนุญาตได้โดยรันคำสั่ง sudo ufw allow 80,443/tcp
Step 2: ลง Certbot เพื่อใช้สร้าง SSL certificate และเพื่อต่ออายุ certificate อัตโนมัติก่อนหมดอายุ ด้วยคำสั่ง
sudo apt-get update
sudo apt install python3-certbot-apache -y
Step 3: ตั้งค่า SSL สำหรับโดเมนที่เราต้องการ (ต้องมีไฟล์ Virtual host ที่ site enable อยู่แล้ว)
sudo certbot --apache -d DOMAIN_NAME.com -d www.DOMAIN_NAME.com
เมื่อรันคำสั่ง certbot แล้ว หากเป็นการใช้งานครั้งแรก จะมีคำถามให้ตอบ เช่น ให้อีเมลล์ผู้ดูแล หรือให้ยอมรับ Terms of Service เป็นต้น
จากนั้น certbot จะทำการขอ SSL certificate จาก let’s encrypt สำหรับโดเมนดังกล่าว หากสำเร็จจะ certbot สร้างไฟล์ apache config และ enable site ที่เป็น SSL ขึ้นมา โดยจะคัดลอกการตั้งค่ามาจากไฟล์ apache config ของ virtual host ของโดเมนนั้นๆ
ในขั้นตอนการตั้งค่า จะมีคำถาม เช่น ต้องการให้ redirect เว็บไปยัง https หรือไม่ ตอบ 2 หากต้องการให้ redirect จาก http ไปยัง https โดยอัตโนมัติ
หากทุกอย่างลงสำเร็จเรียบร้อยดีแล้ว สามารถทดลองเข้าเว็บไซต์ได้ที่ https://DOMAIN_NAME.com จะต้องเข้าใช้งานได้โดยไม่มีขึ้น Certificate Error
Step 4: ทดสอบการต่ออายุ certificate โดยอัตโนมัติ
เนื่องจาก SSL Certificate ของ Let’s Encrypt จะหมดอายุในเวลา 90 วัน โปรแกรม certbot นี้จึงมีความสามารถในการต่ออายุใบรับรองให้โดยอัตโนมัติ ซึ่งเราสามารถดูการตั้งเวลาการต่ออายุได้โดยรันคำสั่ง
sudo systemctl status certbot.timer
จะแสดงสถานะของ service ที่ใช้ในการต่ออายุ ในที่นี้แจ้งว่าจะมีการรัน certbot วันละสองครั้ง
นอกจากนี้ยังสามารถทดสอบดูว่าหากใบรับรองนี้หมดอายุจริงๆ ระบบจะทำการต่ออายุให้เองโดยอัตโนมัติได้จริงหรือไม่ โดยการรัน
sudo certbot renew --dry-run
หากสามารถทำงานได้เป็นปกติ จะเห็นข้อความดังนี้
เท่านี้เว็บไซต์เราก็สามารถใช้งาน SSL ได้ และจะต่ออายุใบรับรองเองโดยโดยอัตโนมัติ ไม่ต้องกังวลว่าใบรับรองจะหมดอายุอีกต่อไป