Việc sử dụng SSL trên trang web là một cách quan trọng để bảo vệ quyền riêng tư và tính bảo mật cho người dùng. Tuy nhiên, việc bật SSL không phải là tất cả: bạn có thể thực hiện nhiều bước để tăng cường hơn nữa tính bảo mật mà trang web của bạn cung cấp, từ việc đặt thuộc tính Bảo mật trên cookie đến bật Bảo mật truyền tải nghiêm ngặt HTTP, sử dụng Chính sách bảo mật nội dung để khoá các đặc quyền của trang web. Tuy nhiên, việc triển khai các tính năng mạnh mẽ này đôi khi có thể khá phức tạp. Để giúp bạn triển khai một hình thức SSL nghiêm ngặt hơn, Chrome 46 sẽ cung cấp một tính năng có tên là báo cáo HPKP.
Tất cả các từ viết tắt này có ý nghĩa gì?
Ngày nay, tính năng bảo mật trên web dựa vào chứng chỉ SSL: chữ ký mã hoá chứng minh rằng một trang web là chính trang web đó. Khi trình duyệt của bạn gửi một yêu cầu đến một URL như https://developers.google.com, máy chủ sẽ cung cấp một chứng chỉ SSL. Nếu chứng chỉ hợp lệ, trình duyệt sẽ cho phép yêu cầu tiếp tục và hiển thị URL của trang web có ổ khoá màu xanh lục trong thanh địa chỉ.
Tuy nhiên, chứng chỉ hợp lệ là gì? Để được coi là hợp lệ, chứng chỉ phải do một tổ chức phát hành chứng chỉ (CA) ký hoặc do một chứng chỉ khác do CA ký (được gọi là CA trung gian). Trình duyệt và hệ điều hành đi kèm với danh sách vài trăm CA đáng tin cậy để phát hành chứng chỉ. Tuy nhiên, vấn đề là theo mặc định, bất kỳ CA nào trong số này cũng có thể phát hành chứng chỉ cho bất kỳ trang web nào. Nếu một trong số các máy chủ đó bị xâm phạm hoặc hoạt động không đúng cách, thì điều đó có thể gây thiệt hại nghiêm trọng cho toàn bộ web.
Nhập tính năng Ghim khoá công khai HTTP (HPKP). Tiêu chuẩn này cho phép các trang web gửi một tiêu đề HTTP hướng dẫn trình duyệt ghi nhớ (hoặc "ghim") các phần của chuỗi chứng chỉ SSL. Sau đó, trình duyệt sẽ từ chối các kết nối tiếp theo không khớp với các ghim mà trình duyệt đã nhận trước đó. Sau đây là ví dụ về tiêu đề HPKP:
Public-Key-Pins:
pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=";
pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";
max-age=259200
Tiêu đề này chỉ định hai hàm băm chứng chỉ làm ghim. Một là hàm băm của một chứng chỉ trong chuỗi chứng chỉ của trang web và hàm còn lại là mã PIN sao lưu hoặc hàm băm của một chứng chỉ mà trang web có thể sử dụng trong trường hợp cần xoay chứng chỉ. Tiêu đề cũng bao gồm một giá trị max-age
. Sau khi số giây đó trôi qua, trình duyệt sẽ quên ghim.
Để biết thêm thông tin chung về HPKP, hãy xem thông số kỹ thuật hoặc bài đăng trên blog tuyệt vời của nhà phát triển Chrome Chris Palmer.
Tôi có nên bật HPKP ngay bây giờ không?
Không nhất thiết. Khi triển khai HPKP, bạn rất dễ mắc lỗi và vô tình thực hiện cuộc tấn công từ chối dịch vụ (DoS) trên trang web của mình. Nếu bạn ghim trang web của mình vào một bộ chứng chỉ rồi phải triển khai một bộ chứng chỉ mới, thì những người dùng đã thấy ghim sẽ không thể truy cập vào trang web của bạn cho đến khi ghim hết hạn (dựa trên giá trị max-age
trong tiêu đề).
Vì khó sử dụng đúng cách, nên HPKP chủ yếu được một số trang web có tầm ảnh hưởng lớn và nhạy cảm về bảo mật sử dụng. Nếu quyết định bật HPKP, bạn nên bắt đầu với một giá trị max-age rất ngắn và tăng dần giá trị này nếu không gặp vấn đề gì.
Báo cáo HPKP là gì và báo cáo này giúp ích như thế nào?
Tính năng báo cáo HPKP (có trong Chrome 46) là một tính năng mà bạn có thể sử dụng để phát hiện lỗi định cấu hình khi triển khai HPKP.
Trước tiên, bạn có thể bắt đầu bằng cách gửi tiêu đề Public-Key-Pins-Report-Only
thay vì tiêu đề 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"
Khi trang web của bạn gửi một tiêu đề như vậy, Chrome sẽ xác minh xem kết nối hiện tại có khớp với các ghim hay không và gửi báo cáo đến report-uri
nếu không khớp. Chrome sẽ không bao giờ chặn các yêu cầu dựa trên các ghim trong tiêu đề Chỉ báo cáo. Vì vậy, đây là cách an toàn để thử nghiệm HPKP và xem liệu nó có gây ra vấn đề cho người dùng hay không mà không có nguy cơ bị tấn công từ chối dịch vụ (DoS) trang web của bạn.
Xin lưu ý rằng tiêu đề Chỉ báo cáo chỉ áp dụng cho yêu cầu mà tiêu đề đó nhận được. Trình duyệt không ghi nhớ các ghim Chỉ báo cáo như đối với các ghim thực. Điều này cho phép bạn kiểm thử cấu hình mà không lo lắng về việc lưu các giá trị không hợp lệ vào bộ nhớ đệm trong trình duyệt của người dùng. Ngoài ra, bạn có thể triển khai từng bước (ví dụ: chỉ trên một tài nguyên) để tránh làm ngập máy chủ bằng các báo cáo.
Khi triển khai tiêu đề Public-Key-Pins
thực để bắt đầu thực thi ghim, bạn cũng có thể thêm giá trị report-uri vào tiêu đề đó để tiếp tục nhận báo cáo nếu có vấn đề xảy ra.
Báo cáo vi phạm HPKP chứa nội dung gì?
Báo cáo vi phạm HPKP là một thông báo JSON được gửi trong yêu cầu POST HTTP đến report-uri
đã định cấu hình. Bạn có thể tìm thấy danh sách các trường trong thông số kỹ thuật, nhưng tôi sẽ làm nổi bật hai trong số đó tại đây: served-certificate-chain
và validated-certificate-chain
. served-certificate-chain
là chứng chỉ giống hệt như chứng chỉ mà Chrome nhận được khi thiết lập kết nối SSL cho yêu cầu. Mặt khác, validated-certificate-chain
là chuỗi mà Chrome đã tạo lại khi cố gắng xác thực chứng chỉ của máy chủ. Điều đáng ngạc nhiên là chuỗi này có thể khác với served-certificate-chain
. Các ứng dụng khác nhau thực hiện việc xác thực chứng chỉ theo nhiều cách và đây có thể là nguyên nhân phổ biến gây ra lỗi định cấu hình HPKP. Hãy nhớ kiểm tra trường này nếu bạn nhận được báo cáo không mong muốn.
Một điểm "bắt được" cuối cùng
Nếu bạn đang triển khai tính năng báo cáo HPKP, hãy nhớ rằng Chrome sẽ xác thực ghim cho tất cả các yêu cầu, bao gồm cả yêu cầu gửi báo cáo. Vì vậy, nếu đã triển khai HPKP cho trang web của mình, bạn có thể muốn gửi báo cáo HPKP đến một miền khác mà bạn chưa ghim. Nếu không, lỗi vi phạm liên quan đến việc ghim trên trang web của bạn sẽ kích hoạt một báo cáo gửi đến cùng một miền. Báo cáo này cũng sẽ không phát hiện lỗi vi phạm liên quan đến việc ghim, do đó, bạn sẽ không nhận được báo cáo.
Nếu không có miền khác, bạn có thể thử một dịch vụ như report-uri.io để xử lý báo cáo vi phạm thay cho bạn.