วิธีติดตั้ง HTTPS ด้วย Certificate ของ Let’s Encrypt

จาก มาใช้งาน let’s encrypt กันเถอะ ของอาจารย์ฉัตรชัย ผมขอขยายความต่อ เอาแบบว่า Copy-Paste กันเลย

โดยในที่นี้ …

  • OS เป็น Ubuntu 18.04
  • Web Server เป็น Apache
  • ที่ Firewall เปิดให้เข้าถึง TCP 80 / 443 จาก Internet ได้ — มันจำเป็นสำหรับการ Verification ของ Certbot ครับ *** ในเบื้องต้นนะ 🙂 ***

Let’s Encrypt คืออะไร อ่าน …
https://letsencrypt.org/getting-started/

เริ่มต้น ต้องติดตั้ง Certbot ก่อน อ่าน …
https://certbot.eff.org/

ดูต้นฉบับการติดตั้งของ Ubuntu 18.04 และใช้ Apache ได้จาก
https://certbot.eff.org/lets-encrypt/ubuntubionic-apache

ติดตั้ง Certbot ก่อน

ใช้คำสั่งต่อไปนี้ จาก User ที่สามารถ sudo ได้

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-apache 

แบบ Auto

จากนั้นใช้คำสั่งต่อไปนี้ เพื่อให้ certbot ทำการติดตั้ง Certificate และแก้ไขไฟล์ (ในที่นี้ใช้ Apache) Configuration ให้เลย

sudo certbot --apache

แบบแก้ไขเอง

หรือถ้าจะทำเอง โดยต้องการเอาเฉพาะ Certificate มา แล้วทำการแก้ไขไฟล์ Apache Configuration เองก็ได้

sudo certbot --apache certonly 

ระบบจะถาม

  • ยอมรับเงื่อนไขไม๊ –> แน่นอน (A) Accept
  • email address ให้ใส่ไปตามจริง
  • ต้องการให้แสดง email address เปิดเผยหรือไม่ –> ผมตอบ No นะ
  • และ บอกว่า Domain Name ของเราคืออะไร ให้ใส่ FQDN ไป เช่น kx1.in.psu.ac.th เป็นต้น

จากนั้น Certbot จะ Callback ไป ให้มีการ Verification จาก Internet ว่าสามารถเข้าถึงได้จริงหรือไม่ (ตรงนี้ ใน PSU ต้องแจ้งทาง Network Admin เพื่อเปิด Port ที่ Firewall ให้เข้าถึง TCP 80 และ 443 ให้สำเร็จก่อน)

เมื่อ Verification สำเร็จ ก็จะได้ไฟล์ Certificate และ Private Key มา จะอยู่ที่ (path แต่ละเครื่องจะแตกต่างกันตรงที่ Domain Name ที่กำหนดข้างต้น) ตามลำดับ

/etc/letsencrypt/live/kx1.in.psu.ac.th/fullchain.pem
/etc/letsencrypt/live/kx1.in.psu.ac.th/privkey.pem

แก้ไขไฟล์

/etc/apache2/sites-available/default-ssl.conf

ให้มีค่าต่อไปนี้

SSLCertificateFile  
   /etc/letsencrypt/live/kx1.in.psu.ac.th/fullchain.pem
SSLCertificateKeyFile 
    /etc/letsencrypt/live/kx1.in.psu.ac.th/privkey.pem

จากนั้นใช้คำสั่งนี้ เพื่อเปิดใช้งาน https

sudo a2enmod ssl

ใช้คำสั่งนี้ เพื่อใช้งาน default-ssl

sudo a2ensite default-ssl

และทำการ Restart apache ด้วยคำสั่งนี้

sudo systemctl reload apache2

ทดสอบใช้งาน HTTPS

ใช้งานได้

NOTE

  • จริง ๆ แล้ว ในองค์กร สามารถทำเครื่อง ๆ หนึ่งขึ้นมา เพื่อติดตั้ง certbot แล้วขอ Certificate มา ของ Domain ต่าง ๆ แล้วค่อย “ย้าย” certificate และ key file ไปเครื่องที่จะใช้งานจริง แล้ว ชี้ Domain Name ใหม่ไปยังเครื่องนั้นก็ได้ แต่เมื่อครบ 90 วัน ต้อง Renew ใหม่ (ทดลองทำกับ Google Compute Engine โดยสร้าง Certificate โดยชี้ Domain ไปยัง IP จริง ของ Google พอเรียบร้อยแล้ว ก็แล้วย้ายไฟล์ ย้าย Domain Name มาที่ IP ภายใน ใช้งานได้ เหมือนกัน) — วิธีนี้ลักไก่เอาได้ แต่ก็จะยุ่งยากหน่อย และต้องระวัง 90 วันที่จะต้อง Renew
  • แต่จะให้ถูกต้อง ก็ควรใช้งานกับเครื่องที่เปิด Firewall ให้เข้าถึง TCP 80 / 443 ได้ เพื่อติดตั้ง certbot จะดีกว่า
  • สามารถขอ Wildcard ได้ เช่น จะขอ *.kx1.in.psu.ac.th ก็ได้ แต่ต้องมีความรู้ DNS กว่านี้หน่อย เดี๋ยวค่อยมาเล่าให้ฟังครับ
  • [UPDATE] กรณีเป็น Web Hosting กล่าวคือ ให้บริการหลาย ๆ Virtual Host เช่น เครื่องหลักใช้ชื่อว่า kx1.in.psu.ac.th ถ้าต้องการให้ www.something.psu.ac.th ชี้มาที่เครื่องนี้ด้วย ก็ทำ www CNAME kx1.in.psu.ac.th.  (ที่ zone something.psu.ac.th) มาก็ได้ แล้วค่อยใช้ certbot ที่เครื่อง kx1.in.psu.ac.th นี้ สร้าง Certificate ให้ก็ได้ครับ

หวังว่าจะเป็นประโยชน์ครับ