https ssl certificate กับการทำเว็บ

https ssl certificate กับการทำเว็บ

หลังจากวันก่อนได้ work hard อย่างหนักกับ ssl certificate https ทั้ง apache , node.js จึงเล็งเห็นแล้วว่า สงสัยคงต้องถ่ายทอดออกมาซะแล้ว ไม่ใช่อะไร เพราะว่าคนอื่นจะได้รู้ และสำหรับให้ตัวเองกลับมาอ่านอีกครั้งด้วยครับ

วันนี้จะมาเล่าเรื่องของ SSL certificate และ การเข้าหรัส การรับส่งข้อมูลล้วนๆเลย ว่ามันมีที่มาที่ไปเป็นอย่างไร ทำไมเราต้องมีมัน แล้วทำไมธนาคาร ถึงชอบเตือนจัง ว่ามันต้องมี บาร์เขียวๆนะ วันนี้ล่ะครับ แจ่มแจ้งแดงแจ๋กันแน่นอนที่สุด

https เป็นเรื่องที่ใกล้ตัวมาก https มันคืออะไร?

หลายๆท่านน่าจะเคยเห็น url ในช่อง address bar ที่มีหน้าตาแบบนี้มาแล้วครับ

ssl certificate green bar

นั่นล่ะครับ https ที่น่าจะใกล้ตัวทุกท่านมากที่สุดแล้ว แต่ผมว่า แบบนี้ น่าจะใกล้ตัวทุกท่านมากขึ้นไปอีกนะครับ ไม่มีใครไม่เคยเห็นแน่นอน แต่ว่าจะสังเกตุหรือเปล่า นั่นเป็นอีกเรื่องหนึ่งครับ

url https

ทั้งสองตัวอย่างที่แสดงให้เห็น นั่นคือ https หรือ อธิบายให้เข้าใจง่ายๆ มันคือ หน้าเว็บที่เข้ารหัสเอาไว้ แต่อาจจะเถียง ไม่เห็นเข้ารหัสอะไรเลย ก็ view source ก็ยังเห็นว่าเป็น script ธรรมดาอยู่นี่นา อ่านโค้ดออกได้ตามปกติ ซึ่งการเข้ารหัสในที่นี้ หมายถึงการเข้ารหัสข้อมูล ก่อนที่จะเริ่มส่งข้อมูลจากฝั่งหนึ่งไปที่อีกฝั่งหนึ่งครับ เมื่อถึงปลายทาง ก็ทำการถอดรหัสออกมาเป็นข้อมูลปกติที่เราได้เห็นหรือได้ใช้นี่แหล่ะครับ

การทำงานของ SSL (หรือ TLS)

เริ่มต้นตั้งแต่หลังจากที่ เริ่มสร้าง TCP connection แล้ว จะต่อด้วยกระบวนการ SSL handshake โดยฝั่ง client จะส่ง รายการ ciphersuite (ประกอบด้วย Authentication, encryption และ message authentication code algorithm) เพื่อให้ฝั่ง server ทำการเลือกใช้ให้ตรงกัน

เมื่อเลือกวิธีพูดคุยกันได้แล้ว server ก็จะเริ่มส่ง certificate ไปให้ client ซึ่ง certificate นี้ จะออกให้โดย client trust คือ ผู้ให้บริการ SSL certificate ที่โลกเราจะมีเจ้าใหญ่ๆอยู่ไม่กี่เจ้าครับ (ถ้าไม่นับเจ้าเล็กๆจะมีไม่เกิน 10 เจ้า เช่น symantec, verisign, GeoTrust, Comodo,RapidSSL เป็นต้น)

จากนั้น client ที่ได้รับ ก็จะตรวจสอบ certificate ว่ามันถูกต้องหรือไม่อย่างไร โดยกระบวนการเช็คนี้ จะมีการเช็คหลายอย่าง ไม่ว่าจะเป็น ต้องยังไม่หมดอายุ, ไม่ถูกถอนใบรับรอง, ชื่อ URL ต้องตรงกัน, ip เดียวกัน อะไรเหล่านี้ 

เมื่อเช็คข้อมูลเรียบร้อยแล้ว client ก็จะเริ่มสร้าง และเข้ารหัส session key โดยใช้ public certificate เข้ามาช่วยในการเข้ารหัส ส่งกลับไปให้ server check

server ก็จะถอดรหัสข้อมูลที่ส่งกลับมาโดยใช้ private key (private key นี้ จะถูกสร้างเอาไว้ที่ server อยู่ก่อนแล้ว เพราะไม่อย่างนั้น เราจะไปซื้อ SSL certificate ไม่ได้) ในการช่วยถอด และส่งคำตอบกลับไปที่ client ว่า โอเคเริ่มรับส่งข้อมูลลับๆกันนี้ได้

จากนั้น server , client ก็รับและส่งข้อมูลหากันโดยใช้ session key ข้อมูลทั้งหมดก็จะน่าเชื่อได้ว่าปลอดภัยแล้วครับ

กระบวนการที่อ่านทั้งหมดนี้ หรือที่เค้าเรียกว่า SSL handshake จะเกิดขึ้นๆทุกครั้ง ที่เราเปิดหน้าเว็บแต่ละหน้า เปลี่ยนหน้าที ก็ handshake ที แต่ว่าแต่ละครั้งจะใช้เวลาสั้นมาก ไม่เกิน 1 วินาที ขึ้นอยู่กับความเร็ว internet ทั้งสองฝั่ง และการตอบสนองจาก server ที่ออก SSL ด้วย

ประโยชน์ที่เราได้รับจาก https SSL certificate

ต้องย้อนลงไปในระดับข้อมูลที่วิ่งอยู่ในเครือข่าย lan เลยครับ ไม่ว่าจะเป็นภายในองค์กร หรือใน internet ด้วยก็ตาม ข้อมูลที่วิ่งไปมาเหล่านี้ สามารถถูกการดักจับได้ครับ (packet sniffing) ซึ่งถ้าเราไม่เข้ารหัสข้อมูลของเรานั้น เมื่อถูกดับจับไปก็จะสามารถอ่านได้ด้วยตาเปล่าเลย เช่น เวลาที่เรากรอกข้อมูลหน้าเว็บ username = abc ช่อง password = def จากนั้นเมื่อเรา submit form ไปไม่ว่าจะเป็นแบบ POST, GET ก็ตาม packet ที่วิ่งไป ก็จะไปแบบ username=abc&password=def อะไรแบบนี้เลยครับ จริงอยู่ที่ form แบบ post เราจะไม่เห็นค่าที่ URL แต่ว่านี่เป็นคนละเรื่องกันครับ ดังนั้นถ้าโดน sniff แล้วก็รู้เลยทันที ว่า username password อะไร นี่เลยเป็นต้นเหตุของความไม่ปลอดภัย นอกเหนือจากนั้น ยังมีเรื่องข้อมูลที่เป็นความลับ เช่น login เข้าเช็คยอดคงเหลือในเว็บธนาคาร หรือว่าข้อมูลส่วนตัว ที่แสดงอยู่ในหน้าเว็บ เหล่านี้โดนดักจับไปได้ทั้งหมดครับ

เมื่อเราติดตั้ง SSL certificate และใช้งานแบบ https:// จากเดิมข้อมูลเราหน้าตาแบบนี้ username=abc&password=def ก็อาจจะกลายเป็นแบบนี้แทน H&x6w2810pK785K06x9P1&4KHq6Ko9714055DD97AB764A2209DDC3C5C7}2hz0VOiu_ba-4SaRo-6UQM[V_ ทำให้คนที่ดักข้อมูลได้ไป ก็อ่านไม่ออก และเอาไปใช้ต่อทันทีเลยไม่ได้

แล้วติดตั้ง SSL แล้วจะปลอดภัยจริงหรือเปล่า ตอบคือ จริง แต่ไม่ 100% เพราะว่าปัจจุบันด้วยความก้าวล้ำของ hardware ด้วยความสามารถของ software สามารถถอดรหัส ในระดับ bit ที่ต่ำๆได้ โดยอาศัยเวลาไม่นานมากเหมือนเมื่อก่อนแล้ว เมื่อก่อน เราเข้ารหัส 64 bit ต้องถอดนานเป็นร้อยปี เดี๋ยวนี้ ไม่กี่เดือนก็ออกแล้วครับ แต่อย่างหนึ่งต้องไม่ลืมก็คือ ความสดใหม่ของข้อมูล เพราะว่าข้อมูลบางอย่าง จะเอาไปใช้ได้ จำเป็นต้องใช้ความสดใหม่ด้วย เช่น ผมต้องการ ดักข้อมูลคนสั่งซื้อหุ้นคนหนึ่ง แล้วผมก็พบว่าเค้าสั่งซื้อหุ้น A ราคา 5 บาทจำนวน 1 ล้านหุ้น แล้วผมต้องการแกล้งเค้าด้วยการส่งคำสั่งขายในราคาที่ถูกกว่า เพื่อให้เค้าขาดทุน ผมก็แกล้งปลอม packet หน้าตาแบบเดิม ส่งกลับไปอีกครั้ง โดยแก้ parameter นิดหน่อย เท่านี้ก็เรียบร้อย แต่ว่า ถ้าข้อมูลเข้ารหัสเอาไว้ ก็ต้องนั่งถอดรหัสเพื่ออ่านค่าข้างในอยู่ 5 เดือน เค้าอาจจะขายหุ้น A ไปหมดก่อนแล้วก็เป็นได้ครับ

และด้วยเหตุนี้ ทำไมเราถึงจำเป็นต้องเปลี่ยนรหัสผ่านบ่อยๆ แม้ว่าตอนกรอกรหัสจะอยู่ในระบบที่มีความปลอดภัยสูง SSL แพงๆแล้วก็ตาม แต่ว่า กรณีนี้ ไม่นับรวม server ที่ทำงานผิดพลาดหรือการออกแบบระบบที่ผิดพลาดด้วยการไม่เข้ารหัสข้อมูลผู้ใช้ เหมือนที่บริษัท IT ของโลกบริษัทหนึ่งโดนไปเมื่อปลายปีที่แล้วนะครับ อันนั้นเสียหายมากมายครับ (เอา username , password จริง มาโชว์บนเว็บกันเลยทีเดียว)

บาร์เขียว? ไม่เขียวได้มั้ย

https green bar

หลายคนที่ใช้บริการหน้าเว็บธนาคาร เค้ามักจะชอบเตือนว่าให้ดู บาร์เขียวเป็นหลักนะ ไม่เขียวคือไม่ปลอดภัย จริงๆพูดแบบนี้ มันถูกแต่ว่าไม่ถูกทั้งหมด เพราะว่าบาร์ไม่เขียว ก็ปลอดภัยได้ครับถ้าได้ย้อนขึ้นไปข้างบนที่ผมเอารูปตัวอย่างของ SSL มาลง นั้นจะเห็นว่า มันมีหลายแบบครับ SSL มันมีหลายระดับราคา ความสามารถ ลูกเล่นมันแตกต่างกันด้วย เช่น เรื่องความปลอดภัยในการเข้ารหัส 128 bit , 256 bit ราคาก็ต่างกันมากโขแล้วครับ แล้วไหนจะเรื่อง browser compatibity , วงเงินการรับประกัน (หลายที่เค้ารับประกันว่า ถ้าข้อมูลถูกดักจับไปใช้งานต่อได้จนเกิดความเสียหาย จะยินดีชดใช้ในวงเงินเท่าไรก็ว่ากันไป) และอีกลูกเล่นหนึ่งก็คือ บาร์เขียวนี่แหล่ะครับ 

ไอเจ้าบาร์เขียวเนี่ย น่าจะมีกันทุกเจ้าที่ให้บริการเลย แต่จะพ่วงท้ายด้วย EV ครับ เช่น SSL Web server Certificates with EV (ย่อมาจาก Extended Validation) ซึ่งราคาก็แพงมหาโหดครับ หลักหมื่นบาทขึ้นไปต่อปี เฉียดๆ 2 หมื่นเลยครับ แต่ว่า แบบที่บาร์ไม่เขียวก็มีครับ และปลอดภัยไม่ต่างกันมากเท่าไร แต่อาจจะไม่ได้ลูกเล่นบาร์เขียวเท่านั้นเอง เอาเป็นว่า ขึ้นอยู่กับงานที่ใช้ และภาพลักษณ์ และงบประมาณน่าจะเป็นการตัดสินใจที่เหมาะกว่า

https not green bar

ทำไมไม่บังคับใช้ SSL เป็นพื้นฐานการทำเว็บ ในเมื่อปลอดภัยกว่า?

คำถามนี้ เป็นคำถามที่น่าสนใจ เพราะว่าในเมื่อการทำเว็บโดยใช้ SSL ก็ทำให้เว็บน่าเชื่อถือมากกว่าเดิม แต่ทำไมเราไม่เลือกใช้มันไปตลอด กับทุกเว็บเลย อย่างที่อธิบายไปในย่อหน้าบนครับ คือว่าทุกครั้งที่เปิดหน้าเว็บ จะมีการ SSL handshake กันทุกครั้ง ทำให้เว็บเรามีความรู้สึกว่ามันช้ากว่าเปิดเว็บตามปกติ ที่เมื่อสร้าง TCP connection กันแล้วก็รับส่งข้อมูลกันต่อเลย เพราะว่าข้อมูลบนเว็บโดยทั่วไป ก็เป็นที่เปิดเผยอยู่แล้ว จึงไม่มีความจำเป็นที่จะต้องเข้ารหัสแต่อย่างใด

อีกเรื่องก็คือ เรื่องการค่าใช้จ่าย การจะติดตั้ง SSL certificate ให้แต่ละเว็บนั้น จะเกิดค่าใช้จ่ายจากหลายส่วนครับ ส่วนแรก ก็คือค่า SSL Certificate ที่เราไปซื้อมานั่นล่ะครับ แม้ว่าเราจะหาถูกๆได้ที่ปีละ 200 บาทก็ตาม (แต่โดยทั่วๆไป จะอยู่ที่ 1,000 บาทขึ้นไปต่อปี ขึ้นอยู่กับระดับความปลอดภัย และการรับประกัน) อีกเรื่องที่ตามมาก็คือ ราคาของ IP Address เพราะว่า การซื้อ SSL certificate มาติดตั้งให้เว็บนั้น หลายๆผู้ให้บริการ hosting เค้าจะบังคับให้เราซื้อ IP แยกออกมาเลย ดังนั้นเราจะต้องมี ip address 1 ip ต่อ 1 url ต่อ 1 SSL ครับคือหมายความว่า ถ้าเรามีเว็บ member.website.com เราต้องใช้ ip 1234 + certificate อีก 1 ใบ แล้วถ้าเราต้องการให้มี certificate ที่หน้าเว็บหลักด้วยคือ website.com เราก็ต้องมีอีก ip 4567 + certificate อีก 1 ใบ(ถึงมันจะมี wildcard ที่ SSL ใบเดียว ใช้กับ subdomain ทั้งหมดได้ แต่ถ้าเป็นกรณีคนละเว็บ คนละ URL กันก็ใช้ไม่ได้อยู่ดี) ทำให้เราเสียค่าใช้จ่ายหลายส่วนมาก และ IP address นี้ราคาถูกๆก็ 200 บาทขึ้นไปต่อเดือนครับ (หลายที่ตั้งเอาไว้ที่ 500 บาทต่อเดือน) ทำให้ยิ่งเปลืองหนักไปอีก ทั้งๆที่ ที่จริงแล้ว server 1 เครื่องเราสามารถใส่เว็บได้เป็นร้อยๆเว็บโดยยังใช้แค่ IP เดียว แต่ถ้ามี IP เดียว เราก็ติดตั้ง SSL ให้ได้เว็บเดียวเท่านั้นครับ (แต่ผู้ให้บริการอีกหลายที่ ก็ไม่ได้บังคับตรงนี้ หากเค้ามี SSL extention ที่ชื่อว่า SNI เค้าสามารถใช้ IP ร่วมกันแต่แยก cert แยกเว็บได้ อันนี้ต้องตรวจสอบดูครับ) และอีกค่าใช้จ่ายหนึ่งที่เกิดขึ้นเป็นเบื้องหลัง ก็คือ ค่าเสียเวลาในการติดตั้งครับ โดยปกติการติดตั้ง SSL มีขั้นตอนเยอะพอสมควรตั้งแต่การสั่งซื้อ ยืนยันตัวเพื่อขอออก cert (เราเรียกว่า การ issue) เพราะว่า SSL ที่แพงมาก เค้าจะขอเอกสารยืนยันบริษัท หรือหน่วยงานเราด้วย และมีการโทรมา verify อีกต่างหาก(จากต่างประเทศเชียวนะเออ) เราก็ต้องเอามาคิดด้วยเช่นกัน

สรุปเรื่อง https ssl certificate

สรุปก็คือ การที่เราจะทำให้เว็บเข้ารหัสการรับส่งข้อมูลได้นั้น เราต้องซื้อ และ ติดตั้ง SSL certificate ที่ server เราซะก่อน จากนั้น เราก็จะเปิดเว็บเราที่เป็น https:// ได้ ทั้งนี้ หน้าเว็บ https:// กับ http:// เราจะทำให้หน้าตาเหมือนหรือแตกต่างกันก็ได้ ขึ้นอยู่กับตอนที่ติดตั้งที่ server เพราะว่ามันตั้งค่าได้ครับ (เป็นเรื่องการตั้งค่าที่ server ไม่ใช่ที่ SSL certificate) และทุกครั้ง ก่อนที่จะเริ่มรับส่งข้อมูลกันก็จะมีการทำ SSL handshake กันก่อนเสมอ เพื่อจะได้รับส่งข้อมูลลับกันได้อย่างเข้าใจ(เข้ารหัส ถอดรหัสได้) โดยการใช้งาน https นี้ จะมีค่าใช้จ่ายเพิ่มขึ้นจากอีกหลายส่วนด้วย ที่มากกว่าการทำเว็บตามปกติ ดังนั้น ต้องพิจารณาที่จุดนี้ด้วย

ครั้งต่อไป จะมาเล่าเรื่องการซื้อ SSL certificate ให้ฟัง และยาวไปถึงการติดตั้ง ทั้งระดับ server configuration และระดับ application จนกระทั่งได้เข้าใช้งานจริง
Create: Modify : 2014-03-06 08:24:52 Read : 9354 URL :