[NestJS] สรุปวิธีเรียกข้อมูลจาก HTTPS โดยใช้ Axios

Image placeholder
แวะมาทักทายกันได้

บทความนี้เป็นการสรุปวิธีแก้ปัญหาและใช้งานเกี่ยวกับ TLS/SSL เมื่อใช้งานร่วมกับ NestJS 


เมื่อต้องการความปลอดภัยบนโปรโตคอล HTTP ก็คงจะรู้กันดีอยู่แล้วว่า เราจะต้องใช้ HTTPS ซึ่งจะต้องมี CA (.pem) หรือ Certificate (crt) +Private Key (key) ในการขอข้อมูลเมื่อมีการ Request Data มาใช้งาน 


NestJS เป็น framework ตัวหนึ่งที่ใช้งานแบบ Restful API สามารถที่จะเรียกใช้งาน Library ต่างๆเหมือนกับ Nodejs ได้เช่นกัน เมื่อนำมาใช้งานบน Docker ก็ยิ่งเหมาะสมกันอย่างมาก 


เมื่อต้องการใช้งาน NestJS ที่ต้องติดต่อขอข้อมูลผ่าน HTTPS ก็จำเป็นที่จะต้องติดตั้ง library ที่เกี่ยวข้อง เช่น fs, https, ssl-root-cas เอาไว้ ให้ run คำสั่งตามด้นล่าง 


npm i fs https ssl-root-cas  


วิธีการใช้งานบน nestjs 


เมื่อติดตั้ง lib เกี่ยวข้องเรียบร้อยแล้วก็ให้ทำการ import 


import * as https from 'https'

import * as ssl from 'ssl-root-cas'


จากนั้นในส่วนของ Controller ภายใน block method หรือ function ให้ใช้งาน method addFile จาก lib ssl-root-cas ในที่นี้ประกาศเอาไว้เป็น ssl จึงใช้แบบนี้ 


ssl.addFile('./file/ca.pem'); 


ใครที่ใช้ NestJS เวลาที่เรียก API ก็จะต้องใช้ httpService ซึ่งมาใช้ Axios เป็น library หลัก 


วิธีเรียกใช้ เช่น 


await this.httpService.get('URL', option) 


URL คือ url path ที่ต้องการเรียกข้อมูล 


Option คือ config ที่ใช้ใน httpService เมื่อใช้ https ก็ต้องใช้ดังตัวอย่าง 

{

  httpsAgent : new https.Agent({

      ca : ssl

   })

} 

httpsAgent คือ parameter ที่ใช้กับ method get

ca คือ parameter ที่ระบุว่าจะใช้ certificate นอกจากนี้ยังสามารถใช้ crt+key ได้

ssl คือ object ที่ได้ addfile cert เอาไว้ 


หากใครไม่สนว่าจะ secure หรือไม่ก็ให้ config ไว้แบบนี้   

{

  httpsAgent : new https.Agent({

      rejectUnauthorized : false

   })

} 


rejectUnauthorized เป็น obtion ที่ ignore ไม่สนใจว่าจะ secure หรือไม่ ก็ไม่แนะนำให้ใช้งาน แต่ถ้าจำเป็นต้องใช้ก่อนเพราะ certificate expire ก็คงจะจำเป็น


อย่างไรก็ตามลองเช็ค วันหมดอายุด้วยคำสั่งข้างล่างด้วยนะ

openssl x509 -enddate -noout -in ca.pem

แวะมาทักทายกันได้
donate