เปิดตัวการปักหมุดคีย์สาธารณะด้วยการรายงาน HPKP

การใช้ 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 หรือ HPKP มาตรฐานนี้ช่วยให้เว็บไซต์ส่งส่วนหัว HTTP ที่สั่งให้เบราว์เซอร์จดจำ (หรือ "ปักหมุด") บางส่วนของเชนใบรับรอง SSL ได้ จากนั้นเบราว์เซอร์จะปฏิเสธการเชื่อมต่อที่ตามมาซึ่งไม่ตรงกับพินที่รับก่อนหน้านี้ ต่อไปนี้คือตัวอย่างส่วนหัว HPKP

Public-Key-Pins:  
       pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=";  
       pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";  
       max-age=259200

ส่วนหัวนี้ระบุแฮชใบรับรอง 2 รายการเป็น PIN 1 รายการเป็นแฮชของใบรับรองในเชนใบรับรองของเว็บไซต์ และอีกรายการเป็น PIN สำรองหรือแฮชของใบรับรองที่เว็บไซต์สามารถใช้ในกรณีที่ต้องหมุนเวียนใบรับรอง ส่วนหัวยังมีค่า max-age ด้วย หลังจากผ่านไปตามจำนวนวินาทีดังกล่าว เบราว์เซอร์จะลืม PIN

ดูข้อมูลเพิ่มเติมเกี่ยวกับ HPKP โดยทั่วไปได้ที่ข้อกำหนดหรือบล็อกโพสต์ที่ยอดเยี่ยมของนักพัฒนาซอฟต์แวร์ Chrome ด้วยกันอย่าง Chris Palmer

ฉันควรเปิด 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 จะไม่บล็อกคำขอตามการปักหมุดในส่วนหัว "รายงานเท่านั้น" ดังนั้นวิธีนี้จึงเป็นวิธีที่ปลอดภัยในการลองใช้ HPKP และดูว่าทำให้เกิดปัญหากับผู้ใช้หรือไม่ โดยที่ไม่ต้องเสี่ยงที่เว็บไซต์จะโดน DoS

โปรดทราบว่าส่วนหัว "รายงานเท่านั้น" จะมีผลกับคำขอที่ได้รับเท่านั้น เบราว์เซอร์จะไม่จดจำหมุดสำหรับรายงานเท่านั้นเหมือนที่จดจำหมุดจริง วิธีนี้ช่วยให้คุณทดสอบการกําหนดค่าได้โดยไม่ต้องกังวลเกี่ยวกับการแคชค่าที่ไม่ถูกต้องในเบราว์เซอร์ของผู้ใช้ และคุณทยอยเปิดตัวได้ (เช่น เปิดตัวในทรัพยากรรายการเดียว) เพื่อหลีกเลี่ยงการทําให้เซิร์ฟเวอร์มีรายงานมากเกินไป

เมื่อเปิดตัวส่วนหัว Public-Key-Pins จริงเพื่อเริ่มบังคับใช้หมุด คุณสามารถใส่ค่า report-uri ในส่วนหัวนั้นด้วย เพื่อให้คุณได้รับรายงานต่อไปหากเกิดปัญหาขึ้น

รายงานการละเมิด HPKP มีข้อมูลอะไรบ้าง

รายงานการละเมิด HPKP คือข้อความ JSON ที่ส่งในคําขอ HTTP POST ไปยัง report-uri ที่กําหนดค่าไว้ รายการช่องมีอยู่ในข้อกําหนด แต่เราจะไฮไลต์ 2 ช่อง ได้แก่ served-certificate-chain และ validated-certificate-chain served-certificate-chain คือใบรับรองที่ Chrome ได้รับเมื่อตั้งค่าการเชื่อมต่อ SSL สำหรับคำขอ validated-certificate-chain นั้นเป็นอีกเชนที่ Chrome สร้างขึ้นใหม่เมื่อพยายามตรวจสอบใบรับรองของเซิร์ฟเวอร์ ซึ่งอาจแตกต่างจาก served-certificate-chain ไคลเอ็นต์แต่ละรายจะตรวจสอบใบรับรองด้วยวิธีที่แตกต่างกัน ซึ่งอาจเป็นสาเหตุที่พบบ่อยของการกำหนดค่า HPKP ที่ไม่ถูกต้อง โปรดตรวจสอบช่องนี้หากคุณได้รับรายงานที่ไม่คาดคิด

สิ่งสุดท้ายที่ควรทราบ

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

หากไม่มีโดเมนอื่น คุณอาจลองใช้บริการอย่าง report-uri.io ซึ่งจัดการรายงานการละเมิดให้คุณแทน