วิธีติดตั้ง 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 ได้ แบบ Auto จากนั้นใช้คำสั่งต่อไปนี้ เพื่อให้ certbot ทำการติดตั้ง Certificate และแก้ไขไฟล์ (ในที่นี้ใช้ Apache) Configuration ให้เลย แบบแก้ไขเอง หรือถ้าจะทำเอง โดยต้องการเอาเฉพาะ Certificate มา แล้วทำการแก้ไขไฟล์ Apache Configuration เองก็ได้ ระบบจะถาม ยอมรับเงื่อนไขไม๊ –> แน่นอน (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 ที่กำหนดข้างต้น) ตามลำดับ แก้ไขไฟล์ ให้มีค่าต่อไปนี้ จากนั้นใช้คำสั่งนี้ เพื่อเปิดใช้งาน https ใช้คำสั่งนี้ เพื่อใช้งาน default-ssl และทำการ Restart apache ด้วยคำสั่งนี้ sudo systemctl reload apache2 ทดสอบใช้งาน HTTPS ใช้งานได้ NOTE จริง ๆ แล้ว ในองค์กร สามารถทำเครื่อง ๆ หนึ่งขึ้นมา เพื่อติดตั้ง certbot แล้วขอ Certificate มา ของ Domain ต่าง ๆ แล้วค่อย “ย้าย” certificate และ key file ไปเครื่องที่จะใช้งานจริง

Read More »

มาใช้งาน letsencrypt กันเถอะ

สำหรับใครก็ตามที่มีความจำเป็นที่จะต้องดูแลเว็บเซิร์ฟเวอร์ในปัจจุบัน ก็ดูเหมือนว่าจะหลีกไม่พ้นที่จะต้องรู้เรื่องของการเซ็ตอัพให้เซิร์ฟเวอร์ที่ต้อดูแล สามารถใช้งานผ่านโปรโตคอล https ได้ นอกเหนือไปจากการใช้งานผ่านโปรโตคอล http ซึ่งเป็นโปรโตคอลมาตรฐานดั้งเดิม สำหรับการให้บริการเว็บเซิร์ฟเวอร์ เอาล่ะ ถ้าจะว่ากันตามตรงแล้ว งานที่ต้องเพิ่มขึ้นมาสำหรับการที่จะทำให้ เว็บเซิร์ฟเวอร์สามารถใช้ https ได้ ถ้าทำให้มันใช้ http ได้แล้ว โดยทั่วไปก็ไม่ได้ยุ่งยากมากขึ้นเท่าไหร่ ขึ้นอยู่กับระบบปฏิบัติการที่เลือกใช้ ขึ้นอยู่กับตัวเว็บเซิร์ฟเวอร์ที่เลือกใช้ ขึ้นอยู่กับเซอร์ติฟิเคท (certificate) ที่ใช้ด้วย แต่ว่ากันโดยทั่วไป ระบบที่มีผู้ใช้งานเยอะ ตัวติดตั้งซอฟต์แวร์ของระบบปฏิบัติการ ก็มักจะจัดเตรียมวิธีการตรงนี้ไว้ให้แล้ว เหลือแค่การเรียกใช้งานเพิ่มแค่ไม่กี่คำสั่ง ก็สามารถใช้งานได้เลย ขอยกตัวอย่างเลยก็แล้วกัน สำหรับระบบปฏิบัติการเดเบียนลินุกซ์ (Debian Linux) รุ่น เจสซี่ (jessie) และ ใช้งาน apache เวอร์ชัน 2 เป็นเว็บเซิร์ฟเวอร์ วิธีการติดตั้งตัวเว็บเซิร์ฟเวอร์ก็คือ $ sudo apt-get install apache2 เพียงเท่านี้ เราก็สามารถใช้งานเว็บเซิร์ฟเวอร์ สำหรับให้บริการแบบสแตติกไฟล์ และสามารถใช้สคริปต์แบบ CGI ได้แล้ว แล้วถ้าต้องการให้มันรองรับแบบไดนามิก โดยใช้ภาษา php ได้ด้วยล่ะ? ก็ไม่ได้ยากอะไร ก็เพียงเพิ่มโมดูลของ php เข้าไป โดยใช้คำสั่ง $ sudo apt-get install libapache2-mod-php5 ตัวโปรแกรมสำหรับติดตั้ง (apt-get) ก็จะตรวจสอบ แพกเกจที่จำเป็นต้องใช้และยังไม่ได้ติิดตั้งเอาไว้ เช่น php5 แล้วก็ติดตั้งแพกเกจเหล่านั้นให้ด้วยเลยโดยอัตโนมัติ หลังจากนั้นเราก็สามารถสร้าง index.php ในไดเรคตอรี่ /var/www/html/ แล้วก็เขียนโปรแกรมภาษา php ให้บริการบนเว็บได้เลย ทีนี้ถ้าต้องการให้บริการเว็บ โดยใช้ https โปรโตคอลล่ะ เพื่อให้มีการเข้ารหัสข้อมูลที่มีการรับส่งระหว่าง ตัวเว็บเบราเซอร์ และ เว็บเซิร์ฟเวอร์ อันนี้ ไม่จำเป็นจะต้องติดตั้งโมดูลเพิ่มเติม เพราะตัว apache ติดตั้งให้โดยปริยายตั้งแต่แรกแล้ว แต่ ไม่ได้เปิดให้ใช้งานโดยอัตโนมัติ ผู้ดูแลระบบจะต้องสั่งเพิ่มว่า ให้เปิดบริการแบบ https ด้วย โดยใช้คำสั่งดังนี้ $ sudo a2enmod ssl $ sudo a2ensite default-ssl และสั่ง restart ตัวเว็บเซิร์ฟเวอร์โดยใช้คำสั่ง $ sudo systemctl restart apache2 เท่านี้ ก็จะสามารถใช้งาน https โปรโตคอลเพิ่มเติมขึ้นมาจากเดิม ที่ใช้งานได้เฉพาะ http โปรโตคอล แต่ … มันไม่ได้จบง่ายๆแค่นั้นน่ะสิ ถึงแม้ว่าการให้บริการจะโดยใช้ https โปรโตคอลจะมีการเข้ารหัสข้อมูลที่มีการรับส่งระหว่างตัวเบราเซอร์กับตัวเซิร์ฟเวอร์ แต่ เซอร์ติฟิเคท (certificate) สำหรับกุญแจที่ใช้ในการเข้ารหัสข้อมูลนั้น จะเป็นแบบที่เรียกว่า self-signed certificate ซึ่งตัวเบราเซอร์โดยทั่วไปจะ ไม่เชื่อถือ (un trusted) ว่าเป็นเซอร์ติฟิเคท ที่ออกให้กับเว็บไซท์ ที่ระบุว่าเป็นโดเมนนั้นๆจริง ในการใช้งานเว็บไซท์ที่ตัวกุญแจเข้ารหัสใช้ self-signed certificate ตัวเบราเซอร์ก็จะ “เตือน”, และสร้างความยุ่งยากในการใช้งานให้กับ ผู้ใช้ที่ต้องการเข้าใช้งานเว็บไซท์นั้นๆ นั่นอาจจะไม่ได้เป็นปัญหาใหญ่อะไร สำหรับเว็บไซท์ที่สร้างขึ้นมาเพื่อให้บริการภายในหน่วยงานกันเอง ซึ่งผู้ใช้งานในหน่วยงาน อาจจะใช้วิธีการอื่นๆ เช่นเดินไปถาม, โทรศัพท์ไปถาม, ส่ง e-mail ไปถาม … หรือในกรณีที่เป็นจริงส่วนใหญ่ ก็คือ ไม่ต้องถาม ก็แค่กดปุ่มยอมรับความเสี่ยง ให้ตัวเบราเซอร์จำเซอร์ติฟิเคทนั้นไว้ แล้วก็ใช้งานไปแค่นั้นเอง แต่นั่น อาจจะเป็นปัญหาในเรื่องของความน่าเชื่อถือ ถ้าเว็บไซท์ดังกล่าว เปิดให้บริการให้กับบุคคลภายนอกหน่วยงานด้วย ยกตัวอย่างที่ใกล้ตัวหน่อยก็แล้วกัน ถ้าเว็บไซต์ของภาควิชาใดภาควิชาหนึ่ง ในหลายๆคณะของมหาวิทยาลัยสงขลานครินทร์ เปิดให้บริการแบบ https ขึ้นมา และบุคคลภายนอก ซึ่งบุคคลภายนอกนี้ ไม่จำเป็นจะต้องเป็น บุคคลภายนอกของมหาวิทยาลัย แม้กระทั่งบุคคลากรของมหาวิทยาลัย แต่อยู่ต่างคณะ หรือแม้ต่างภาควิชา การที่จะตรวจสอบว่า เว็บดังกล่าว เป็นเว็บของหน่วยงานนั้นจริงๆ ก็เริ่มเป็นเรื่องยุ่งยากขึ้นมาระดับนึงแล้ว ถ้าต้องให้บริการกับบุคคลภายนอกมหาวิทยาลัยด้วย การที่จะตรวจสอบว่าเป็นเว็บของหน่วยงานนั้นๆ ยิ่งเป็นเรื่องที่ ยุ่งยากเกินเหตุ … แน่นอน ในทางปฏิบัติ ใครที่จำเป็นจะต้องเว็บไซท์เหล่านั้น ก็คงจะต้องใช้ต่อไป ก็เพราะจำเป็นที่จะต้องใช้

Read More »