การใช้ SSL ในเว็บไซต์เป็นวิธีสำคัญในการรักษาความปลอดภัยและความเป็นส่วนตัวของผู้ใช้ แต่การเปิดใช้ SSL ไม่ใช่จุดสิ้นสุดของเรื่องราว เพราะยังมีอีกหลายขั้นตอนที่คุณสามารถทำได้เพื่อเพิ่มความปลอดภัยที่เว็บไซต์ของคุณมอบให้ ตั้งแต่การตั้งค่าแอตทริบิวต์ Secure ในคุกกี้ ไปจนถึงการเปิดใช้ HTTP Strict Transport Security และการใช้นโยบายความปลอดภัยของเนื้อหาเพื่อล็อกสิทธิ์ของเว็บไซต์ อย่างไรก็ตาม บางครั้งการใช้ฟีเจอร์ที่มีประสิทธิภาพเหล่านี้ก็อาจเป็นเรื่องยาก Chrome 46 มาพร้อมกับฟีเจอร์ที่เรียกว่าการรายงาน HPKP เพื่อช่วยให้คุณเปิดตัว SSL ในรูปแบบที่เข้มงวดมากขึ้น
ตัวย่อทั้งหมดเหล่านี้หมายความว่าอย่างไร
ความปลอดภัยบนเว็บในปัจจุบันอาศัยใบรับรอง SSL ซึ่งเป็นลายเซ็นที่เข้ารหัสเพื่อพิสูจน์ว่าเว็บไซต์เป็นไปตามที่อ้าง เมื่อเบราว์เซอร์ส่งคำขอไปยัง URL เช่น https://developers.google.com เซิร์ฟเวอร์จะให้ใบรับรอง SSL และหากใบรับรองถูกต้อง เบราว์เซอร์จะอนุญาตให้คำขอดำเนินการต่อและแสดง URL ของเว็บไซต์พร้อมแม่กุญแจสีเขียวในแถบที่อยู่
แล้วใบรับรองที่ถูกต้องคืออะไร ใบรับรองต้องได้รับการลงนามโดยผู้ออกใบรับรอง (CA) หรือโดยใบรับรองอื่นที่ลงนามโดย CA (หรือที่เรียกว่า CA ระดับกลาง) จึงจะถือว่าถูกต้อง เบราว์เซอร์และระบบปฏิบัติการจะมาพร้อมกับรายชื่อ CA หลายร้อยรายการที่เชื่อถือได้ในการออกใบรับรอง อย่างไรก็ตาม ปัญหาคือโดยค่าเริ่มต้น CA เหล่านี้สามารถออกใบรับรองให้กับเว็บไซต์ใดก็ได้ หากมีผู้ออกใบรับรองรายใดรายหนึ่งถูกบุกรุกหรือทำงานผิดพลาด ก็อาจสร้างความเสียหายอย่างร้ายแรงต่อทั้งเว็บ
ป้อน HTTP Public Key Pinning หรือ HPKP มาตรฐานนี้ช่วยให้เว็บไซต์ส่งส่วนหัว HTTP ที่สั่งให้เบราว์เซอร์จดจำ (หรือ "ปักหมุด") ส่วนต่างๆ ของเชนใบรับรอง SSL ได้ จากนั้นเบราว์เซอร์จะปฏิเสธการเชื่อมต่อที่ตามมาซึ่งไม่ตรงกับพินที่ได้รับก่อนหน้านี้ ตัวอย่างส่วนหัว HPKP
Public-Key-Pins:
pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=";
pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";
max-age=259200
ส่วนหัวนี้ระบุแฮชใบรับรอง 2 รายการเป็นพิน โดยรายการหนึ่งคือแฮชของใบรับรองในกลุ่มใบรับรองของเว็บไซต์ และอีกรายการหนึ่งคือ PIN สำรอง หรือแฮชของใบรับรองที่เว็บไซต์สามารถใช้ได้ในกรณีที่ต้องหมุนเวียนใบรับรอง ส่วนหัวยังมีค่า max-age ด้วย หลังจากผ่านไปตามจำนวนวินาทีดังกล่าว เบราว์เซอร์จะลืมเกี่ยวกับ PIN
ดูข้อมูลเพิ่มเติมเกี่ยวกับ HPKP โดยทั่วไปได้ที่ข้อกำหนดหรือบล็อกโพสต์ที่ยอดเยี่ยมของ Chris Palmer ซึ่งเป็นนักพัฒนาซอฟต์แวร์ Chrome เช่นกัน
ฉันควรเปิดใช้ HPKP ตอนนี้เลยไหม
ไม่จำเป็นเสมอไป เมื่อคุณติดตั้งใช้งาน HPKP คุณอาจทำผิดพลาดและทำให้เว็บไซต์เกิด DoS โดยไม่ตั้งใจได้ง่ายๆ หากคุณปักหมุดเว็บไซต์ไว้กับใบรับรองชุดหนึ่งแล้วต้องติดตั้งใช้งานใบรับรองใหม่ ผู้ใช้ที่เห็นการปักหมุดจะเข้าถึงเว็บไซต์ของคุณไม่ได้จนกว่าการปักหมุดจะหมดอายุ (อิงตามค่า max-age ในส่วนหัว)
เนื่องจาก HPKP เป็นเรื่องที่ซับซ้อนและต้องทำให้ถูกต้อง ปัจจุบันจึงมีเพียงเว็บไซต์ที่มีชื่อเสียงและมีความละเอียดอ่อนด้านความปลอดภัยจำนวนหนึ่งเท่านั้นที่ใช้ HPKP หากตัดสินใจเปิดใช้ HPKP คุณควรเริ่มต้นด้วยค่า max-age ที่สั้นมาก และค่อยๆ เพิ่มค่าหากไม่พบปัญหาใดๆ
การรายงาน HPKP คืออะไรและช่วยได้อย่างไร
การรายงาน HPKP ซึ่งมีอยู่ใน Chrome 46 เป็นฟีเจอร์ที่คุณใช้ตรวจหาการกำหนดค่าที่ไม่ถูกต้องขณะเปิดตัว HPKP ได้
ก่อนอื่น คุณสามารถเริ่มด้วยการส่งส่วนหัว Public-Key-Pins-Report-Only แทนส่วนหัว Public-Key-Pins ดังนี้
Public-Key-Pins-Report-Only:
max-age=2592000;
pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=";
pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";
report-uri="https://example.net/pkp-report"
เมื่อเว็บไซต์ของคุณส่งส่วนหัวดังกล่าว Chrome จะยืนยันว่าการเชื่อมต่อปัจจุบันตรงกับพินหรือไม่ และจะส่งรายงานไปยัง report-uri หากไม่ตรงกัน Chrome จะไม่บล็อกคำขอตามพินในส่วนหัว Report-Only ดังนั้นวิธีนี้จึงเป็นวิธีที่ปลอดภัยในการลองใช้ HPKP และดูว่าทำให้เกิดปัญหาสำหรับผู้ใช้หรือไม่โดยไม่ต้องเสี่ยงต่อการทำ DoS ในเว็บไซต์ของคุณ
โปรดทราบว่าส่วนหัว Report-Only จะมีผลกับคำขอที่ได้รับเท่านั้น เบราว์เซอร์จะไม่จดจำหมุด Report-Only เหมือนกับที่จดจำหมุดจริง ซึ่งจะช่วยให้คุณทดสอบการกำหนดค่าได้โดยไม่ต้องกังวลเกี่ยวกับการแคชค่าที่ไม่ถูกต้องในเบราว์เซอร์ของผู้ใช้ และคุณสามารถทยอยเปิดตัว (เช่น ในทรัพยากรเดียว) เพื่อหลีกเลี่ยงไม่ให้เซิร์ฟเวอร์เต็มไปด้วยรายงาน
เมื่อคุณเปิดตัวส่วนหัว Public-Key-Pins จริงเพื่อเริ่มบังคับใช้พิน
คุณสามารถรวมค่า report-uri ไว้ในส่วนหัวนั้นด้วย เพื่อให้คุณ
ได้รับรายงานต่อไปหากเกิดปัญหาขึ้น
ข้อมูลในรายงานการละเมิด HPKP มีอะไรบ้าง
รายงานการละเมิด HPKP คือข้อความ JSON ที่ส่งในคำขอ POST HTTP ไปยัง report-uri ที่กำหนดค่าไว้ ดูรายการช่องได้ในข้อกำหนด แต่เราจะไฮไลต์ 2 ช่องที่นี่ ได้แก่ served-certificate-chain และ validated-certificate-chain served-certificate-chain คือใบรับรองที่ Chrome ได้รับเมื่อตั้งค่าการเชื่อมต่อ SSL สำหรับคำขอ ในทางกลับกัน validated-certificate-chain คือเชนที่ Chrome สร้างขึ้นใหม่เมื่อพยายามตรวจสอบใบรับรองของเซิร์ฟเวอร์ ซึ่งน่าแปลกใจที่อาจแตกต่างจาก served-certificate-chain ไคลเอ็นต์แต่ละรายจะตรวจสอบความถูกต้องของใบรับรองด้วยวิธีที่แตกต่างกัน และอาจเป็นสาเหตุที่พบบ่อยของการกำหนดค่า HPKP ที่ไม่ถูกต้อง โปรดตรวจสอบช่องนี้หากคุณได้รับรายงานที่ไม่คาดคิด
"ข้อควรระวัง" ข้อสุดท้าย
หากคุณกำลังติดตั้งใช้งานการรายงาน HPKP โปรดทราบว่า Chrome จะตรวจสอบการปักหมุดสำหรับคำขอทั้งหมด ซึ่งรวมถึงคำขอส่งรายงานด้วย ดังนั้นหากคุณได้ติดตั้งใช้งาน HPKP สำหรับเว็บไซต์ คุณอาจต้องการส่งรายงาน HPKP ไปยังโดเมนอื่นที่คุณไม่ได้ปักหมุดไว้ มิฉะนั้น การละเมิดการปักหมุดในเว็บไซต์จะทริกเกอร์รายงานไปยังโดเมนเดียวกัน ซึ่งจะทำให้การละเมิดการปักหมุดล้มเหลวด้วย และคุณจะไม่ได้รับรายงาน
หากไม่มีโดเมนอื่นที่พร้อมใช้งาน คุณอาจลองใช้บริการอย่าง report-uri.io ซึ่งจะจัดการรายงานการละเมิดให้คุณแทน