ไม่ต้องรวย IP ก็มี HTTPS ได้หลายเว็บไซต์ – Server Name Indicator (SNI)

โดยทั่วไป ถ้าหากเว็บไซต์อยากจะใช้ HTTPS สิ่งแรกที่จะต้องมีคือไอพีแอดเดรสส่วนตัวของตัวเองหนึ่งไอพี แต่สิ่งนี้ไม่จำเป็นอีกต่อไป จากส่วนขยายโปรโตคอล SSL ที่ชื่อว่า Server Name Indication (RFC 4366) ตัวย่อว่า SNI

การทำงาน HTTPS / SSL Handshake เดิม

การส่ง HTTPS โดยปกติจะเข้ารหัสเรียบร้อยก่อน แล้วจึงทำการส่ง HTTP Header เพื่อขอข้อมูล ดังนั้น เมื่อก่อนเวลาที่จะมีเว็บไซต์ผ่าน HTTPS ได้ จึงต้องมีไอพีเป็นของตัวเองก่อน ทั้งนี้ เพราะว่า พอเริ่มต้นเรียกผ่าน HTTPS ด้วยตัวของโปรโตคอลเอง จะสั่งให้ Browser และ Server ทำการตกลงกันเกี่ยวกับการเข้ารหัสเสียก่อน (SSL Handshake) ซึ่งการเข้ารหัสนี่แหละต้องใช้ Public/Private Key ร่วมกับ SSL Certificate โดยที่แต่ละเว็บไซต์ก็มี SSL Certificate ที่แตกต่างกันไป จึงเป็นการบังคับไปในตัวในขั้นตอนของการตกลงการเข้ารหัส ว่ากำลังจะติดต่อไปที่เว็บไซต์ใด

SSL Handshake Diagram
ภาพน่าจะเอามาจากหนังสือ Network ครับ

 

เอาละครับ ของเดิมมันทำงานไม่ได้ เพราะว่าในขั้นตอนของ SSL Handshake นั้น โปรโตคอลไม่ได้บอกว่า Browser จะต้องระบุว่ากำลังจะติดต่อไปที่โฮสใด ดังนั้น กว่าจะรู้ตัว ก็เข้ารหัสไปเรียบร้อยแล้ว

Server Name Indicator (SNI)

ด้วย Server Name Indicator เค้าก็เลยทำการยก ไอ้ก้อนที่จะบอกว่าจะติดต่อไปที่ไหนนี่แหละ ออกมาบอกเซิฟเวอร์ ตั้งแต่ขั้นตอนแรกกันเลยทีเดียว

SNI Packet Captured

ในภาพนี้ จะเห็นตัว Packet ที่ถูกส่งจาก Client ไปที่ Server ครับ ในขั้นตอน Hello ก็ระบุไปด้วยเลยว่าจะติดต่อกับ Server Name อะไร (ในภาพคือ plus.google.com) ดังนั้น เซิฟเวอร์เมื่อรู้ว่า Client จะติดต่อกับบริการอะไร ก็สามารถเลือก SSL Certificate หยิบออกมาใช้ได้ถูกชิ้น เพื่อส่งกลับหา Client ครับ

ดังนั้น ในปัจจุบันจึงไม่มีความจำเป็นที่จะต้องใช้ไอพีหนึ่งหมายเลขต่อหนึ่งเว็บไซต์อีกต่อไป สามารถใช้ได้ไม่จำกัดกันเลยทีเดียวครับ อย่างไรก็ตาม ถ้าจำเป็นต้องคำนึงถึง User ที่ใช้ Browser โบราณ ก็อาจจำเป็นต้องคำนึงถึงตรงนี้ครับ แต่ผมคิดว่า ปัจจุบันไม่น่ามีใครต้องใช้บราวเซอร์โบราณขนาดนั้นอีกแล้ว

SNI นั้นเริ่มใช้ในบราวเซอร์ตั้งแต่ Firefox 2.0+ , Opera 8.0+ Internet Explorer 7+, Chrome, Safari 3.2.1 ครับ (Wiki)

HTTP Daemon

ในฝั่ง Server นั้น ผมดูแค่สองตัวหลักคือ Apache / Nginx ทั้งคู่ต่างก็ Supported SNI และไม่ต้องทำอะไรเพิ่มเติม รายละเอียดดูได้ตามลิงค์ครับ

ทิ้งท้าย

ผมอยากจะฝากไว้ว่า เมื่ออุปสรรคหมดไปหนึ่งอย่าง นักพัฒนาเว็บ ก็ควรพิจารณาการใช้ HTTPS ให้มากขึ้นนะครับ อย่าลืมว่า SSL เป็นส่วนหนึ่งของ Google Ranking Signal ครับ ส่วนค่า SSL Certificate ในตอนนี้ประมาณ 300 บาทต่อปี ก็มีขายกันเยอะแล้วครับ แต่ถ้าใครยังติดอุปสรรค อาจลองดู Cloudflare มาช่วยทำ HTTPS ให้แทน ก็ได้เช่นกันครับ

Leave a Reply

Your email address will not be published. Required fields are marked *