วันเสาร์ที่ 4 เมษายน พ.ศ. 2563


การติดตั้ง SSL บน web server อย่างถูกต้อง 
ด้วยบริการ SSL certificate ฟรีจาก Let's Encrypt

        การให้บริการ web ที่ปลอดภัยจะต้องมีการเข้ารหัส (https) จะต้องมี SSL certificate  โดย SSL Certificate ก็คือ ใบรับรองอิเล็กทรอนิกส์ เป็นไฟล์ข้อมูลขนาดเล็ก ที่ได้มีการผูกไว้กับ Private Key ของเครื่องเซิร์ฟเวอร์ เพื่อยืนยันตัวตนและความถูกต้องในการส่งข้อมูลระหว่างเครื่องเซิร์ฟเวอร์กับเว็บเบราว์เซอร์หรือ Application ที่ใช้งาน มีการเข้ารหัสและถอดรหัสผ่านเทคโนโลยี SSL/TLS หากข้อมูลของท่านถูกดักจับไปได้ ข้อมูลก็ท่านก็ยังมีความปลอดภัย เพราะแฮกเกอร์จะไม่สามารถถอดรหัสข้อมูลของคุณได้ เนื่องจากข้อมูลที่ได้ไปจะอยู่ในรูปแบบที่อ่านไม่ออกจะต้องมีคีย์ถอดรหัสที่เหมาะสมและตรงกันเท่านั้น ถึงจะสามารถถอดรหัสได้  



       โดย SSL Certificate ที่ใช้จะต้องออกจากผู้รับรองที่น่าเชื่อถือได้ซึ่งมีค่าใช้จ่าย แต่บทความนี้จะแนะนำการใช้บริการโดย Let's Encrypt ซึ่งเป็นผู้ออกไปรับรอง SSL certificate ที่ใช้งานได้โดยไม่เสียค่าใช้จ่ายและใช้ระบบอัตโนมัติในการจัดการใบรับรองความปลอดภัยสำหรับเว็บไซต์เข้ารหัส โดยเราจะใช้งานผ่าน client ที่มีให้ แต่ใบรับรองจะมีอายุเพียง 90 วัน แต่ยังมีข้อดีคือช่วยลดความเสียหายที่จะเกิดขึ้นหากกุญแจที่ใช้ยืนยันใบรับรองถูกเข้าถึงโดยผู้ไม่ประสงค์ดี กุญแจที่ถูกขโมยไปจะสามารถใช้ได้เพียงในช่วงระยะเวลาสั้นๆเท่านั้น

         การขอใบรับรองจาก Let's Encrypt จะมีกระบวนการยืนยันโดเมนดังนี้
      กระบวนการขอใบรับรองจะจัดการผ่านโปรโตคอลที่เรียกว่า Automated Certificate Management Environment (ACME) โดยโปรโตคอลนี้สร้างขึ้นมาเพื่อที่จะทำให้กระบวนการยืนยันโดเมน (Domain Validation) กระทำได้อย่างอัตโนมัติโดยไม่ต้องมีมนุษย์เข้าไปเกี่ยวข้องเลย โดยผู้ใช้ต้องระบุอีเมลและโดเมนที่ต้องการลงไป โดยอีเมลนั้นจะถูกนำไปใช้เป็นบัญชีผู้ใช้สำหรับ ACME server ด้วย
         กระบวนการยืนยันโดเมนที่ ACME ใช้จะเรียกว่า Domain Validation with Server Name Indication (DVSNI) การทำงานคร่าวๆจะเป็นดังนี้ ACME server จะขอให้ client สร้างใบรับรองตนเองที่มีข้อมูลจาก server ตนเอง เสร็จแล้ว ACME server จะเชื่อมต่อเข้ามาและตรวจสอบใบรับรอง ถ้าถูกต้องกระบวนการยืนยันโดเมนก็จะเสร็จสมบูรณ์

       การขอใบรับรองนั้นแบ่งได้เป็นสองแบบ
         1. ขอใบรับรองและติดตั้งอัตโนมัติ จะต้องใช้ apache หรือ nginx โดย LE's client นั้นจะทำการใช้ HTTP server ที่ตั้งค่าไว้ทำการยืนยันโดเมนเพื่อขอใบรับรองรวมถึงติดตั้งให้กับ HTTP server ที่เปิดอยู่ในทันที 
         2. ขอใบรับรองเพียงอย่างเดียว วิธีนี้จะได้ใบรับรองมาเพื่อนำไปติดตั้งด้วยตนเอง โดยจะทำได้ 3 แบบ คือ manual สร้าง server ขึ้นมาเองโดยผู้ใช้, standalone สร้าง server ขึ้นมาใหม่โดย LE's client และ webroot เป็นการใช้ server ที่เปิดไว้อยู่แล้ว
   

        โดยบทความนี้จะแนะนำการขอใบรับรองแบบที่หนึ่ง คือ ขอใบรับรองและติดตั้งโดยอัตโนมัติ บน web server อย่างถูกต้อง ด้วยบริการ SSL certificate ฟรีจาก Let's Encrypt โดยใช้ web server Apache บน Ubuntu มีขั้นตอนดังนี้

        1. การติดตั้งเว็บเซิร์ฟเวอร์ Apache บน Ubuntu 18.04 LTS
        บทความนี้จะใช้เซิร์ฟเวอร์ Ubuntu 18.04 LTS  โดยจะต้องติดตั้งเว็บเซิร์ฟเวอร์ Apache เพื่อให้สามารถเข้าใช้งานหน้าเว็บได้ จะมีขั้นตอนดังต่อไปนี้

           ขั้นตอนที่ 1 – การติดตั้งเว็บเซิร์ฟเวอร์ Apache 
            - ใช้คำสั่งดังนี้เพื่ออัปเดตแพ็คเกจของเรา :

         
           - ใช้คำสั่งดังนี้เพื่อติดตั้งแพ็คเกจ  apache 2  :


         
          ขั้นตอนที่ 2 – ตรวจสอบเว็บเซิร์ฟเวอร์ของเรา

           ให้ตรวจสอบการเข้าถึงหน้าเริ่มต้นของ Apache เพื่อยืนยันว่าซอฟต์แวร์ที่เราได้ติดตั้งมีการทำงานอย่างถูกต้องหรือไม่ โดยเข้าผ่าน IP  :



  



  ถ้าซอฟต์แวร์ทำงานปกติจะเห็นหน้าเว็บ Apache เริ่มต้นของ Ubuntu 18.04 แต่จะแสดงเว็บไซต์ไม่ปลอดภัย






        ขั้นตอนการติดตั้งเว็บเซิร์ฟเวอร์ Apache   ได้เสร็จแล้วต่อไปจะเป็นขั้นตอนการขอและติดตั้ง  SSL certificate จาก Let's Encrypt โดยจะมีขั้นตอนดังต่อไปนี้


        2.การขอและติดตั้ง SSL certificate


           ขั้นตอนที่ 1 การติดตั้งเครื่องมือที่ใช้สำหรับการขอใช้งาน Let's Encrypt certificate คือ certbot
การใช้ certbot  นับว่าเป็นวิธีที่ง่ายที่สุดเป็นเครื่องมือที่ใช้ในการขอใบรับรองและติดตั้งโดยอัตโนมัติ

            การติดตั้ง certbot จะมีวิธีการที่แตกต่างกันตามซอฟต์แวร์และระบบ โดยวิธีการนี้จะใช้ Apache บน Ubuntu 18.04 LTS ให้ใช้คำสั่งดังนี้


             - ใช้คำสั่งดังนี้เพื่อเพิ่ม Certbot PPA








           - ใช้คำสั่งดังนี้เพื่อติดตั้ง Certbot 




           ขั้นตอนที่ 2 – การแก้ไขไฟล์  virtual host
           ไฟล์ virtual host คือ ไฟล์ที่ระบุการกำหนด virtual host ของเราและกำหนดวิธีที่ Apache จะตอบสนองต่อคำขอโดเมนต่างๆ โดยไฟล์ 000-default.conf จะมีมาพร้อมกับ apache
           
           - สามารถดูไฟล์ได้จากคำสั่งดังนี้ :

     
  
           - ให้แก้ไขไฟล์  virtual host โดยใช้คำสั่ง nano เพื่อเข้าไปแก้ไข


           โดยจะต้องแก้ไขข้อมูลดังนี้
           - ServerAdmin คือ email ของ admin   เพื่อให้ผู้ดูแลสามารถรับอีเมลได้
           - ServerName คือ ชื่อโดเมนของเรา เพื่อให้โดเมนของเราถูกต้องนำไปใช้ในการขอใบรับรอง
           - DocumentRoot คือ ที่เก็บไฟล์ เพื่อให้สามารถเข้าถึงไดเรกทอรี่ที่ถูกต้อง โดยบทความนี้จะมีไดเรกทอรี่ที่ /var/www/html
             โดยไฟล์ virtual host ควรจะมีลักษณะดังรูป


         โดยบทความนี้จะมีแค่หนึ่งโดเมนถ้าผู้ใช้คนใดต้องการมีหลายโดนเมนสามารถทำการคัดลอกไฟล์นี้และแก้ไขข้อมูล โดยใช้คำสั่งดังต่อไปนี้ :


    sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/ชื่อไฟล์ของคุณหรือโดเมน.conf

         ขั้นตอนที่ 3 - ใช้ certbot ในการขอ certificate รับและติดตั้งใบรับรอง ซึ่งโดเมนเว็บไซต์ที่ขอจะต้องเปิดให้บริการจริงและสามารถใช้งานได้จากอินเทอร์เน็ตได้เรียบร้อยแล้วเพื่อที่ทาง Let's Encrypt จะใช้ยืนยันความเป็นเจ้าของเว็บไซต์ได้ ให้ใช้คำสั่งได้ดังนี้ :


          เมื่อใช้คำสั่งนี้แล้ว certbot จะเริ่มทำงานและจะมีขั้นตอนในการขอ certificate ดังนี้


           - จะสอบถาม email address สำหรับการต่ออายุและประกาศความปลอดภัย

  
           - การอ่านข้อกำหนดต่างๆ และยอมรับข้อตกลงหรือไม่ 


- การสอบถามถึงความต้องการของคุณที่จะแบ่งปัน email address ของคุณให้แก่ Let's Encrypt
โดย Let's Encrypt จะส่งอีเมลเกี่ยวกับงานต่างๆ ให้กับคุณ 



           - สอบถามชื่อที่จะเปิดใช้งาน https หรือชื่อโดเมนของเรา
โดยชื่อโดเมนจะเป็นชื่อโดเมนที่เราได้ใส่ในไฟล์ virtual host 


           - การระบุว่า ต้องการจะทำให้ certbot เข้าไปเปลี่ยนการตั้งค่าใน Apache บังคับให้เว็บไซต์จะต้องถูกเปลี่ยนเส้นทางทุกการร้องขอจาก http ไปที่โหมดความปลอดภัย (https) ที่ใช้กับใบรับรองที่เพิ่งออกเสมอหรือไม่ ถ้าเลือกทางที่ 2 นับจากนี้การเข้าเว็บไซต์ของเราก็จะเป็นแบบปลอดภัยโดยอัตโนมัติ


        - จะเป็นการสรุปว่าได้ทำเสร็จแล้วและบอกที่เก็บใบรับรองของเรา
        - ใบรับรองจะถูกดาวน์โหลดและติดตั้งแล้ว เว็บไซต์ของเราจะเป็น https ให้โดยอัตโนมัติและสามารถตรวจสอบใบรับรองที่ร้องขอได้ที่ 


         - Certbot จะเข้าไปแก้ไขไฟล์เพื่อให้ใช้งานใบรับรองได้ คือ /etc/apache2/sites-enabled/000-default.conf แก้ในส่วน https redirect และ ไฟล์ 000-default-le-ssl.conf ใน folder เดียวกันถูกสร้างเพิ่มขึ้นมารองรับระบบ virtual host SSL และ Certificate file ต่างๆ ซึ่งมีความสัมพันธ์กับ virtual host ใน 000-default.conf


     เมื่อเราได้ทำการขอและติดตั้ง SSL certificate เสร็จแล้ว ต่อไปจะเป็นการทดสอบการเข้าเว็บไซต์เพื่อทดสอบว่าสิ่งที่เราได้ทำมาสามารถใช้งานได้หรือไม่

           ขั้นตอนที่ 4 - ทดสอบการเข้าเว็บไซต์
           เปิดเว็บเบราว์เซอร์และพิมพ์ชื่อโดเมนของเรา :
           - จะเห็นได้ว่า เว็บไซต์ของเราจะมีความปลอดภัยโดยใช้ใบรับรองของ Let's Encrypt ซึ่งได้รับความเชื่อถือจากทุก browser
          



         - เราสามารถเข้าไปไปดูรายละเอียดต่างๆ ของใบรับรองที่เราได้ขอมา โดยจะมีบอกรายละเอียด
               1.ใบรับรองนี้ออกให้ใคร
               2.ใบรับรองนี้ออกโดยใคร
               3.วันที่ขอใบรับรองและวันที่หมดอายุ
       รายเอียดอื่นๆสามารถดูได้จาก details




การต่ออายุใบรับรอง
         - เนื่องจาก Let’s Encryptre เป็น  SSL แบบฟรี จึงมีอายุใช้งานเพียงแค่ 90 วัน  เราจึงจำเป็นที่จะต้องต่ออายุใบรับรองใหม่ก่อนที่ใบรับรองจะหมดอายุโดยเราสามารถใช้ Client ของ Let’s Encrypt ที่มีฟังก์ชันนี้มาให้ด้วยอยู่แล้ว
ก่อนที่จะเราจะรันคำสั่งในการต่ออายุเราสามารถตรวจสอบวันหมดอายุของใบรับรองได้โดยคำสั่งดังนี้ :


sudo openssl x509 -enddate -noout -in /etc/letsencrypt/live/ชื่อโดเมนของเรา/fullchain.pem



        การต่ออายุใบรับรองของ Web Server ที่ใช้ Apache สามารถใช้คำสั่งได้ดังนี้ :



/opt/letsencrypt/letsencrypt-auto certonly --apache --keep-until-expiring -d ชื่อโดเมนของเรา



         - สังเกต Parameter --keep-until-expiring  โดยถ้าเราส่งParamter นี้เข้าไปด้วยตัว Client จะเช็คอายุของใบรับรองและจะต่ออายุให้ก็ต่อเมื่ออายุของใบรับรองต่ำกว่า 30 วัน โดยถ้าหากต้องการทดลอง Force ให้ตัว Client ต่ออายุใบรับรองให้เสมอเราสามารถใช้ Parameter  --renew-by-default  แทนได้และถ้าหากใบรับรองได้รับการต่ออายุแล้วจะมีข้อความขึ้นตามภาพด้านล่าง




.
.
.
.
.
.
.
.
.
แหล่งที่มา 
1.ติดตั้ง Free SSL Certificate จาก Let's Encrypt ให้กับเว็บไซต์ - IKQ.ME

2.Let's Encrypt - CMU ITSC Network

3.Certbot - Ubuntubionic Apache

4.How To Install the Apache Web Server on Ubuntu 18.04 | DigitalOcean

5.SSL คืออะไร ทำไมต้องใช้ SSL - Netway

6.มารู้จัก Let's Encrypt กันเถอะ | Blognone

7.ติดตั้ง Free SSL Certificate จาก Let's Encrypt ให้กับเว็บไซต์ - IKQ.ME