วันพฤหัสบดี, 19 กุมภาพันธ์ 2569

เจาะลึก SSL Inspection คืออะไร? ทำไม FortiGate ถึงบล็อกหน้าเว็บ HTTPS พร้อมวิธีตั้งค่าให้ปลอดภัย

ปัญหาโลกแตกของคนใช้ FortiGate (หรือ Firewall ยี่ห้ออื่นๆ) คือวันดีคืนดีเปิดเว็บที่เป็น HTTPS แล้วขึ้นแจ้งเตือนว่า “Your connection is not private” หรือ “Certificate Warning” ทั้งที่เข้าผ่าน Chrome หรือ Safari ปกติ

วันนี้ผมจะมาเจาะลึกแบบเพื่อนคุยให้ฟังครับว่า ภายใต้หน้าจอนั้นมันเกิดอะไรขึ้น ทำไม Firewall ถึงต้องเข้ามา “ยุ่ง” กับการเข้ารหัสของเรา และทำไมบางครั้งมันถึงทำให้เราเข้าเว็บไม่ได้


1. ทำไมต้องใช้ SSL/TLS? (ความเข้าใจพื้นฐาน)

ปกติเวลาเราส่งข้อมูลบนโลกอินเทอร์เน็ต ถ้าไม่เข้ารหัส ใครก็สามารถ “แอบดู” ข้อมูลเราได้ เหมือนเราส่งไปรษณีย์บัตรที่ใครก็อ่านข้อความข้างหลังได้ SSL (ปัจจุบันคือ TLS) จึงถูกสร้างมาเพื่อ “ใส่ซองจดหมายและประทับตราครั่ง” เพื่อให้มีแค่เรากับเว็บไซต์ปลายทางเท่านั้นที่อ่านได้


2. เมื่อ FortiGate เข้ามาแทรกกลาง (SSL Inspection)

ปัญหาเริ่มตรงนี้ครับ: แฮกเกอร์ก็ใช้ SSL เหมือนกัน

ถ้า FortiGate ปล่อยให้ข้อมูลที่เข้ารหัสผ่านไปเฉยๆ ไวรัสหรือมัลแวร์ที่ซ่อนอยู่ในไฟล์ที่ดาวน์โหลดผ่าน HTTPS ก็จะหลุดรอดการตรวจสอบไปได้

FortiGate จึงต้องทำสิ่งที่เรียกว่า Deep SSL Inspection ซึ่งเปรียบเสมือน “เจ้าหน้าที่ไปรษณีย์ที่ขอเปิดซองจดหมายเพื่อตรวจอาวุธ” กระบวนการคือ

  1. FortiGate ตัดการเชื่อมต่อตรงกลาง
  2. ตัวมันเองสวมรอยเป็นเว็บไซต์ปลายทาง เพื่อคุยกับเรา
  3. ตัวมันเองสวมรอยเป็นเรา เพื่อไปคุยกับเว็บไซต์จริง
  4. เมื่อตรวจเสร็จว่าไม่มีไวรัส มันจะเข้ารหัสใหม่แล้วส่งให้เรา

3. ทำไมถึง “เข้าเว็บไม่ได้” หรือขึ้น Warning?

นี่คือสาเหตุที่พบบ่อยที่สุดในชีวิตจริงครับ

ก. เครื่องเรา “ไม่เชื่อใจ” FortiGate (Missing CA Certificate)

เวลา FortiGate ส่งข้อมูลที่ตรวจเสร็จแล้วมาให้เรา มันจะเซ็นชื่อกำกับด้วย CA Certificate ของตัวเครื่อง FortiGate เอง แต่คอมพิวเตอร์ของเราไม่รู้จัก “นาย FortiGate” คนนี้มาก่อน มันจึงฟ้องว่า “นี่ไม่ใช่ใบรับรองจากเว็บจริงนะ!”

  • วิธีแก้ ต้องเอาไฟล์ Certificate จาก FortiGate ไปติดตั้ง (Install) ไว้ในเครื่องคอมพิวเตอร์ของเราให้เป็น Trusted Root CA

ข. การทำ “Certificate Pinning”

แอปพลิเคชันบางตัว (เช่น LINE, Facebook หรือแอปธนาคาร) ถูกออกแบบมาให้คุยกับ “ใบรับรองตัวจริง” เท่านั้น ถ้ามีอะไรมาแทรกกลาง (แม้จะเป็น Firewall ที่หวังดี) แอปจะหยุดทำงานทันทีเพื่อความปลอดภัย

  • วิธีแก้ แอดมินต้องตั้งค่า Exempt (ยกเว้น) เว็บหรือแอปเหล่านั้นไม่ให้โดนตรวจ SSL

ค. เว็บไซต์ใช้เทคโนโลยีใหม่เกินไป หรือเก่าเกินไป

บางครั้งเว็บไซต์ใช้การเข้ารหัสแบบใหม่ (เช่น TLS 1.3) แต่ FortiGate รุ่นเก่าไม่รองรับ หรือในทางกลับกัน เว็บไซต์เก่ามากจนใช้ SSL รุ่นที่มีช่องโหว่ FortiGate ก็จะบล็อกทิ้งทันทีเพื่อป้องกันเรา


4. ตารางสรุป อาการและสาเหตุ

อาการที่เจอสาเหตุที่เป็นไปได้ใครต้องแก้ไข
“Your connection is not private”ยังไม่ได้ติดตั้ง CA Certificate ของ FortiGateผู้ใช้งาน/IT Support
เข้าเว็บธนาคารไม่ได้ แต่เว็บอื่นได้ติดกลไกความปลอดภัย (HSTS/Pinning)IT Admin (ต้องทำ Exclusion)
Error: SSL_PROTOCOL_ERRORเวอร์ชั่นของ SSL/TLS ไม่ตรงกันIT Admin (ปรับจูน Profile)

สรุป มันคือความปลอดภัย ไม่ใช่การกลั่นแกล้ง

การที่ FortiGate เข้ามาแทรกแซงการเข้ารหัส อาจจะดูวุ่นวายและทำให้เข้าเว็บบางเว็บลำบากในตอนแรก แต่ในมุมมองของความปลอดภัยองค์กร “สิ่งที่เรามองไม่เห็น คือสิ่งที่เราป้องกันไม่ได้” ถ้าองค์กรไม่ทำ SSL Inspection มัลแวร์กว่า 80% ในปัจจุบันจะวิ่งเข้าเครื่องพนักงานได้แบบสบายๆ ผ่านทางช่องทาง HTTPS ที่ทุกคนไว้ใจครับ

ขั้นตอนปฏิบัติที่สำคัญที่สุดที่จะทำให้คอมพิวเตอร์ของคุณ “เลิกบ่น” และยอมให้เข้าเว็บไซต์ผ่าน FortiGate ได้อย่างราบรื่น โดยแบ่งเป็น 2 ส่วนหลัก คือการนำไฟล์ออกมาจากเครื่อง Firewall และการนำไปติดตั้งในเครื่องผู้ใช้ครับ


ส่วนที่ 1 การนำไฟล์ Certificate ออกจาก FortiGate (Export)

สำหรับเจ้าหน้าที่ IT หรือแอดมินที่มีสิทธิ์เข้าหน้าจอ Config

  1. Log in เข้าไปที่หน้า FortiGate GUI
  2. ไปที่เมนู System > Certificates
  3. มองหา Certificate ที่ใช้ทำ SSL Inspection (โดยปกติชื่อจะเริ่มต้นด้วย Fortinet_CA_SSL)
  4. คลิกเลือกไฟล์นั้นแล้วกดปุ่ม Download
  5. คุณจะได้ไฟล์นามสกุล .cer หรือ .crt มา (เก็บไฟล์นี้ไว้เพื่อส่งให้พนักงานในองค์กร)

ส่วนที่ 2 วิธีการติดตั้งลงในเครื่องผู้ใช้งาน (Install)

สำหรับ Windows (Chrome, Edge, Brave)

Windows จะมี “คลังเก็บใบรับรอง” ส่วนกลางที่เบราว์เซอร์ส่วนใหญ่เรียกใช้ร่วมกัน

  1. ดับเบิลคลิก ที่ไฟล์ Certificate (.cer) ที่โหลดมา
  2. กดปุ่ม Install Certificate…
  3. เลือก Local Machine (ถ้าต้องการให้มีผลกับทุก User ในเครื่องนั้น) แล้วกด Next
  4. สำคัญมาก: เลือกข้อที่สอง “Place all certificates in the following store”
  5. กด Browse แล้วเลือกโฟลเดอร์ชื่อ Trusted Root Certification Authorities
  6. กด Next และ Finish จนขึ้นว่า “The import was successful”

สำหรับ macOS (Safari, Chrome)

บน Mac จะจัดการผ่านโปรแกรมที่ชื่อว่า Keychain Access

  1. ดับเบิลคลิก ที่ไฟล์ Certificate
  2. ระบบจะเปิดโปรแกรม Keychain Access ขึ้นมาอัตโนมัติ (หรือลากไฟล์ไปวางในแถบ “System”)
  3. ค้นหาชื่อ Certificate ของ Fortinet ในรายการ
  4. ดับเบิลคลิกที่ชื่อนั้น แล้วคลิกที่ลูกศรหน้าคำว่า Trust
  5. ในช่อง “When using this certificate:” ให้เปลี่ยนจาก Use System Defaults เป็น Always Trust
  6. ใส่รหัสผ่านเครื่อง Mac เพื่อยืนยันการเปลี่ยนแปลง

ส่วนที่ 3 กรณีพิเศษสำหรับ Firefox 🦊

ต้องระวังว่า Firefox ไม่ใช้คลัง Certificate ของ Windows/Mac แต่มันมีคลังของตัวเอง ถ้าคุณใช้ Firefox ต้องทำเพิ่มดังนี้:

  1. เปิด Firefox ไปที่ Settings > Privacy & Security
  2. เลื่อนลงมาล่างสุดที่หัวข้อ Certificates กดปุ่ม View Certificates…
  3. ไปที่แถบ Authorities แล้วกด Import
  4. เลือกไฟล์ Certificate จาก FortiGate
  5. ติ๊กถูกที่ช่อง “Trust this CA to identify websites” แล้วกด OK

⚠️ ข้อควรระวัง (Security Check)

  • อย่าติดตั้ง Certificate สุ่มสี่สุ่มห้า ควรติดตั้งเฉพาะไฟล์ที่ได้รับจากแผนก IT ของบริษัทคุณเท่านั้น เพราะผู้ที่มี Certificate นี้จะสามารถ “ถอดรหัส” ข้อมูลที่คุณรับส่งได้ทั้งหมด
  • หากทำแล้วยังเข้าไม่ได้ ให้ลองปิด-เปิด Browser ใหม่ หรือตรวจสอบว่าเวลา (Date & Time) ในเครื่องคอมพิวเตอร์ตรงกับปัจจุบันหรือไม่ เพราะถ้าเวลาเพี้ยน SSL จะทำงานผิดพลาดทันที

การติดตั้ง Certificate ลงในเครื่องพนักงานจำนวนมาก (Mass Deployment) จะช่วยลดภาระงานของ IT ได้มหาศาลครับ โดยปกติเรามี 2 วิธีหลักที่นิยมใช้กันในองค์กร คือการใช้ Group Policy (GPO) สำหรับเครื่องที่ Join Domain และการใช้ PowerShell Script สำหรับเครื่องทั่วไป


วิธีที่ 1 การใช้ Group Policy (GPO) – แนะนำที่สุด

หากบริษัทคุณมีระบบ Active Directory (AD) วิธีนี้คือวิธีที่สะอาดและมาตรฐานที่สุดครับ เพราะเครื่องพนักงานจะได้รับ Certificate อัตโนมัติเมื่อ Log in

  1. เปิด Group Policy Management บน Server
  2. สร้าง GPO ใหม่ (เช่น “FortiGate_CA_Deployment”)
  3. ไปที่: Computer Configuration > Policies > Windows Settings > Security Settings > Public Key Policies
  4. คลิกขวาที่ Trusted Root Certification Authorities แล้วเลือก Import
  5. เลือกไฟล์ .cer ของ FortiGate ที่เตรียมไว้ แล้วกด Next จนจบ
  6. สั่ง gpupdate /force ที่เครื่องพนักงาน หรือรอให้เครื่องรีสตาร์ทครับ

วิธีที่ 2 การใช้ PowerShell Script

หากคุณต้องการส่งเป็นไฟล์ให้พนักงานกดรันเอง หรือใช้ร่วมกับเครื่องมืออื่น (เช่น PDQ Deploy หรือ Endpoint Management) สคริปต์นี้คือคำตอบครับ

สคริปต์ PowerShell (.ps1)

สคริปต์นี้จะทำหน้าที่ตรวจสอบก่อนว่ามี Certificate นี้อยู่หรือยัง ถ้าไม่มีจะทำการติดตั้งลงใน Trusted Root Store ของเครื่องทันที

PowerShell

# 1. ระบุพาธของไฟล์ Certificate (วางไฟล์ไว้ใน Network Share หรือที่ที่เครื่องเข้าถึงได้)
$certPath = "\\ServerShare\Certs\Fortinet_CA_SSL.cer"

# 2. ตรวจสอบว่าไฟล์มีอยู่จริงไหม
if (Test-Path $certPath) {
    try {
        # 3. สั่งติดตั้งเข้าสู่ LocalMachine\Root (Trusted Root Certification Authorities)
        Import-Certificate -FilePath $certPath -CertStoreLocation Cert:\LocalMachine\Root
        Write-Host "Success: Certificate has been installed successfully." -ForegroundColor Green
    }
    catch {
        Write-Host "Error: Failed to install certificate. Please run as Administrator." -ForegroundColor Red
    }
}
else {
    Write-Host "Error: Certificate file not found at $certPath" -ForegroundColor Yellow
}

วิธีที่ 3 การใช้ Batch File (.bat)

วิธีนี้ง่ายและคลาสสิกที่สุด โดยใช้คำสั่ง certutil ซึ่งเป็นโปรแกรมจัดการ Certificate พื้นฐานของ Windows

สคริปต์ Batch File

สร้างไฟล์ชื่อ install_cert.bat แล้วคัดลอกโค้ดนี้ลงไป (วางไฟล์ .bat ไว้ในโฟลเดอร์เดียวกับไฟล์ .cer):

Code snippet

@echo off
:: ตรวจสอบสิทธิ์ Admin (ต้องรันด้วยสิทธิ์แอดมินเท่านั้น)
net session >nul 2>&1
if %errorLevel% == 0 (
    echo Installing FortiGate Certificate...
    
    :: เปลี่ยน "Fortinet_CA_SSL.cer" เป็นชื่อไฟล์จริงของคุณ
    certutil -addstore -f "Root" "Fortinet_CA_SSL.cer"
    
    echo.
    echo Installation Complete!
    pause
) else (
    echo ####### ERROR: PLEASE RUN AS ADMINISTRATOR #######
    pause
)

💡 ข้อแนะนำสำหรับแอดมิน

  • การกระจายไฟล์ หากใช้สคริปต์ อย่าลืมตรวจสอบว่าพนักงานสามารถเข้าถึง Path ที่เก็บไฟล์ Certificate ได้ (เช่น Permission ของ Shared Folder)
  • สิทธิ์การรัน (Privilege) การติดตั้งลงใน LocalMachine (เพื่อให้มีผลกับทุก User) จำเป็นต้องรันสคริปต์ด้วยสิทธิ์ Administrator เท่านั้น
  • ทดสอบก่อนเสมอ แนะนำให้ลองรันกับเครื่องทดสอบ 1-2 เครื่องก่อนจะกระจายให้พนักงานทั้งแผนก เพื่อป้องกันความผิดพลาดครับ