SSL/TLS เบื้องต้น

Datafarm
4 min readMar 27, 2024

--

ในเวลาเราเล่นอินเทอร์เน็ตหรือการใช้งาน Service ต่าง ๆ สิ่งที่คอยปกป้องข้อมูลสำคัญของเราให้มีความปลอดภัยอยู่เสมอ นั่นก็คือ SSL/TLS นั่นเอง แต่ก่อนจะมารู้จักกับ SSL/TLS และวิธีการตรวจสอบนั้น เรามาพูดถึงประวัติความเป็นมาของเจ้า SSL/TLS นี้กันก่อนดีกว่าครับ

SSL/TLS คืออะไร

  • SSL ย่อมาจาก Secure Sockets Layer
  • TLS ย่อมาจาก Transport Layer Security

SSL/TLS เป็น Protocol ที่ใช้ปกป้องข้อมูลเวลา Client รับส่งข้อมูลกับ Server บนอินเทอร์เน็ต โดยหน้าที่หลัก ๆ ของ SSL/TLS นั้น จะเป็นการเข้ารหัสข้อมูลเพื่อที่เวลาข้อมูลของเราถูกดักฟังจากผู้ไม่สงค์ดี จะทำให้ผู้ไม่ประสงค์ดีไม่สามารถอ่านข้อมูลจนรู้เรื่องได้

ขอยกตัวอย่าง Protocol ที่มีการใช้นำ SSL/TLS มาประยุกต์ใช้ เช่น FPT, SMTP, Telnet, VoIP และที่ขาดไม่ได้เลยก็คือ HTTP ที่เราใช้งานกันแทบทุกวันเลยก็ว่าได้

ความเป็นมาของ SSL/TLS

SSL กับ TLS นั้นมักถูกเรียกใช้แทนกัน สืบเนื่องมาจากการที่ TLS ก็คือร่าง Upgrade ของ SSL นั่นเอง

SSL นั้นถูกคิดค้นโดย Netscape เป็นครั้งแรกโดยใช้ชื่อ “SSL 1.0” และถูกพัฒนาต่อยอดมาเรื่อย ๆ ตั้งแต่ “SSL 2.0”, “SSL 3.0”, “TLS 1.0”, “TLS 1.1”, “TLS 1.2” มาจนถึงเวอร์ชันล่าสุดอย่าง “TLS 1.3” โดยจะมี “TLS 1.2” และ “TLS1.3” เป็นเวอร์ชันที่ได้รับการสนับสนุนอยู่ ส่วนเวอร์ชันอื่น ๆ นั้นได้ตกรุ่นเป็นที่เรียบร้อยแล้ว

TLS (1.2) ทำงานอย่างไร

ตัวอย่างการทำงานของ HTTPS

จากรูปตัวอย่างจะเป็นการทำงานของ HTTPS ที่เริ่มต้นจากการที่ทั้ง Client และ Server ทำ Three-Way Handshake เพื่อสร้างช่องทางการสื่อสารสำหรับการรับส่งข้อมูล หลังจากนั้น Client จะส่ง “Client hello” ไปที่ Server โดย “Client hello” นั้น ประกอบไปด้วยเวอร์ชันของ TLS ที่ Client รองรับ, ชุดของอัลกอริทึมที่ใช้ในการสร้างการเชื่อมต่อ SSL/TLS หรือเรียกสั้น ๆ ว่า Cipher Suites และ Option ต่าง ๆ ของ TLS

หลังจาก Client ทำการส่ง “Client hello” สำเร็จ Server จะทำการเลือก TLS เวอร์ชันและ Cipher Suites ที่ Client และ Server รองรับ หลังจากนั้น Server จะส่ง SSL/TLS Certificate หรือ Digital Certificate และตอบกลับมาด้วย “Server hello” ไปที่ Client

Client ทำการยืนยัน Digital Certificate ของ Server และหาก Client ตกลงที่จะใช้ Cipher Suites และ TLS ที่ Server ตอบกลับมาได้แล้วนั้น Client จะทำการสร้าง Session Key เพื่อใช้เข้ารหัสข้อมูลส่งไปยัง Server โดยใช้ Key Exchange Algorithm ที่ได้ตกลงกันไว้ และส่ง “Change Cipher Spec” เพื่อให้ Server ทราบว่า Client พร้อมที่จะรับส่งด้วยข้อมูลที่เข้ารหัสแล้ว หลังจากที่ Server ได้รับและทำการประมวลผลแล้ว Server จะได้ Session Key ที่ Client ทำการสร้างขึ้นมา

Server จะส่ง “Change Cipher Spec” มาให้ Client เพื่อให้ Client รับทราบว่า Server ได้รับ Session Key หลังจากนั้นทุกการรับส่งข้อมูลระหว่าง Client และ Server จะถูกเข้ารหัสทำให้ผู้ไม่สงค์ดีที่ดักฟังข้อมูลของเราไม่สามารถอ่านข้อมูลนั้นรู้เรื่องได้นั่นเอง

ตัวอย่าง ขั้นตอน TLS 1.2 Handshake

  1. Client และ Server เชื่อมต่อกันโดยทำ Three-Way Handshake

2. Client ส่ง “Client Hello” ซึ่งประกอบไปด้วยเวอร์ชันของ TLS ที่ Client รองรับ, Cipher Suites และ Option ต่าง ๆ ของ TLS

3. Server จะทำการเลือก TLS เวอร์ชัน, Cipher Suites, และ Option ต่าง ๆ ที่ Client และ Server รองรับ และตอบกลับมาด้วย “Server hello”

4. Server ทำการส่ง Digital Certificate, Key Exchange Algorithm, และ “Server Done” เพื่อให้ Client ทราบ

5. Client ทำการส่ง Session Key เพื่อใช้เข้ารหัสข้อมูลส่งไปยัง Server โดยใช้ Key Exchange Algorithm ที่ได้ตกลงกันไว้ และส่ง “Change Cipher Spec”

6. Server ทำการส่ง “Change Cipher Spec” แล้ว Session Ticket โดยสร้างจาก Session Key ที่ Client ส่งมา หลังจากนั้นข้อมูลระหว่าง Client กับ Server จะถูกเข้ารหัสไว้

Cipher Suites

ส่วนใหญ่นั้นจะประกอบไปด้วย Key Exchange Algorithm, Encryption Algorithm, และ Message Authentication Code (MAC)

Key Exchange Algorithm

คือกระบวนการส่ง Secret Key เพื่อใช้เข้ารหัสข้อมูลระหว่าง Client และ Server โดยในการส่ง Secret Key นั้นจะใช้ Asymmetric Encryption เพื่อไม่ให้ผู้ไม่ประสงค์ดีขโมย Secret Key ได้

ตัวอย่าง Key Exchange Algorithm

  • Rivest, Shamir, Adleman (RSA)
  • Diffie–Hellman (DH)
  • Elliptic Curve Diffie-Hellman Ephemeral (ECDHE)

Encryption Algorithm

หรือกระบวนการเข้ารหัสโดยใช้เทคนิคต่าง ๆ โดยแปลงข้อความหรือ “Plaintext” ไปเป็น “Ciphertext” ด้วย Secret Key

ตัวอย่าง Encryption Algorithm

  • Advanced Encryption Standard (AES)
  • Blowfish
  • Triple Data Encryption Standard (3DES)

Message Authentication Code (MAC)

หรือ Authentication Tag คือข้อมูลที่ถูกส่งไปพร้อมกับข้อความ เพื่อใช้ในการยืนยันตัวตนของผู้ส่งว่ามาจากผู้ส่งจริง ๆ และยังใช้ตรวจสอบความถูกต้องของข้อมูลว่าถูกต้องครบถ้วนหรือไม่ อีกด้วย

ตัวอย่าง Message Authentication Code

  • Hash-based Message Authentication Code (HMAC)
  • KECCAK Message Authentication Code (KMAC)
  • Cipher-based Message Authentication Code (CMAC)

เราสามารถตรวจสอบ Cipher Suites ที่มีความปลอดภัยเพิ่มเติมได้ที่ https://ciphersuite.info/

SSL/TLS Testing

SSL/TLS Testing คือการทดสอบการตั้งค่าของ SSL/TLS ว่ามีความปลอดภัยมากน้อยเท่าไหร่ โดยในการทดสอบ SSL/TLS นั้น หลัก ๆ แล้วจะทดสอบเวอร์ชันของ SSL/TLS, Cipher Suites ต่าง ๆ ที่รองรับ, Digital Certificate, และช่องโหว่ต่าง ๆ

โดยเราสามารถทำการ Test SSL/TLS ได้ด้วยการใช้เครื่องมือตรวจสอบได้แก่

1. SSL Labs

2. testssl.sh

SSL Labs

เป็นเครื่องมือที่ใช้ในการตรวจสอบ SSL/TLS ออนไลน์ โดยไม่ต้องติดตั้งบนตัวเครื่อง

เราสามารถทำการทดสอบ SSL/TLS ได้โดยการเข้าสู่ URL https://www.ssllabs.com/ssltest/ และพิมพ์ Hostname ลงในช่องค้นหา โดยตัว SSL Labs จะมีการให้คะแนนเป็น Rating ต่าง ๆ แต่ถ้าระบบของเรานั้นไม่ได้ Published บน Internet หรือเป็น Service ที่ใช้กันภายในองค์กร SSL Labs จะไม่สามารถทำการตรวจสอบได้ แนะนำให้ใช้ตัว testssl.sh แทน

ในตัวอย่างการทดสอบ SSL/TLS ด้วย SSL Labs ผู้เขียนจะใช้เว็บไซต์ www.facebook.com ในการทดสอบ

โดยในตัวอย่าง SSL Labs ได้ทำการตรวจสอบวอร์ชันของ SSL/TLS และ Cipher Suites ที่ระบบรองรับอีกทั้งยังตรวจสอบ Digital Certificate และช่องโหว่ได้อีกด้วย

แต่จากผลการทดสอบพบว่า www.facebook.com นั้นได้ Rating ที่ B เพราะว่าตัวระบบดันไปรองรับ “TLS 1.0” และ “TLS 1.1” แต่นั่นไม่ได้แปลว่าเว็บไซต์ไม่มีความปลอดภัยแต่อย่างใด แต่เป็นเพราะว่าหากระบบรองรับแต่ “TLS 1.2” และ “TLS 1.3” ผู้ใช้งานหรือ User ที่ใช้เบราว์เซอร์หรือระบบเก่าที่ไม่รองรับ TLS ดังกล่าวจะไม่สามารถใช้งานเว็บไซต์นั้น ๆ ได้ ซึ่งเท่ากับการลดจำนวนผู้ใช้งานลงนั่นเอง

testssl.sh

อีกเครื่องมือที่ผู้เขียนแนะนำก็คือ testssl.sh เพราะว่าสามารถใช้ทดสอบระบบภายในได้ อีกทั้งยังใช้งานง่าย ติดตั้งง่าย และตรวจสอบช่องโหว่ได้ครอบคลุมกว่าตัว SSL Labs

ในการติดตั้งเครื่องมือดังกล่าวนั้นสามารถดาวน์โหลดได้ที่ https://github.com/drwetter/testssl.sh โดยสามารถใช้งานได้ทั้งเครื่อง Linux และ Windows แต่สำหรับเครื่อง Windows นั้นต้องทำการติดตั้ง Docker เสียก่อน โดยสามารถดาวน์โหลดได้ที่ https://www.docker.com/products/docker-desktop/ เลยครับ

ในตัวอย่างเห็นจะว่า testssl.sh มีการตรวจสอบช่องโหว่ที่ครอบคลุมและแยกช่องโหว่ออกมาเข้าใจง่ายกว่า SSL Labs

แต่ในส่วนของการตรวจสอบอื่น ๆ นั้น testssl.sh มีผลลัพท์คล้าย ๆ กับ SSL Labs

จบไปแล้วนะครับสำหรับการทดสอบการตั้งค่าของ SSL/TLS ว่ามีความปลอดภัยมากน้อยแค่ไหน และบทความนี้เป็นบทความแรกของผู้เขียนเองเลยก็ว่าได้ หวังว่าผู้อ่านทุกท่านจะได้รับความรู้กันนะครับ ในส่วนของรายละเอียดเพิ่มเติมสามารถอ่านได้ตามอ้างอิงด้านล่างได้เลยครับ สำหรับบทความต่อไปจะเป็นเรื่องอะไรนั้น ไว้รอติดตามกันได้นะครับ ขอบคุณครับ

--

--