17. tháng 4 2025
Do không tìm thấy logic của HTTP Digest Auth Middleware trong phần mã nguồn server TR-069 của TeamsACS, tôi bắt đầu nghi ngờ rằng mình có thể hiểu sai phần xác thực của giao thức TR-069. Vì vậy, tôi đã tra cứu tài liệu chính thức của giao thức này.
Trong tài liệu có hai mục nhỏ nói về việc xác thực:
Tôi sẽ dịch từng đoạn và cố gắng hiểu rõ hơn:
Nếu thiết bị CPE không được xác thực bằng TLS, thì hệ thống ACS phải xác thực CPE qua HTTP. Nếu TLS được sử dụng cho mã hóa, thì ACS nên sử dụng xác thực cơ bản (basic authentication). Nếu TLS không được sử dụng, thì ACS phải sử dụng xác thực dạng tiêu hóa (digest authentication).
Hai điều sau soi keo hom nay dễ hiểu hơn, nhưng điều đầu tiên cần tiếp tục nghiên cứu nguyên lý xác thực TLS. Có lẽ vì TeamsACS đã kích hoạt xác thực TLS nên hệ thống ACS không sử dụng HTTP Digest Authentication mà chỉ dùng một phiên bản giới hạn của Basic Auth.
Thiết bị CPE PHẢI hỗ trợ cả xác thực HTTP cơ bản và dạng tiêu hóa. Hệ thống ACS chọn phương pháp xác thực bằng cách gửi thách thức xác thực cơ bản hoặc dạng tiêu hóa. Nếu TLS được sử dụng cho mã hóa, thì CPE NÊN chủ động gửi thông tin đăng nhập cơ bản theo như được định nghĩa trong Phần 2 của tài liệu số 7.
Như vậy, việc mô phỏng CPE không hỗ trợ digest auth dường như cũng không phải vấn đề lớn.
Lưu ý - Việc sử dụng thách thức xác thực yêu cầu tin nhắn ban đầu (thường là yêu cầu RPC kiểu Inform) phải được gửi đi; việc sử dụng xác thực cơ bản chủ động cùng với TLS là an toàn và tránh được nhu cầu thêm yêu cầu.
Nếu CPE nhận được thách thức xác thực từ hệ thống ACS (bất kể là dạng cơ bản hay tiêu hóa), thì CPE NÊN gửi header Authorization trong tất cả các yêu cầu HTTP tiếp theo trong suốt thời gian kết nối TCP. Dù CPE có làm như vậy hay không, hệ thống ACS CÓ THỂ gửi thách thức xác thực bổ sung ở bất kỳ giai đoạn nào của phiên làm việc, dù trong một hoặc nhiều kết nối TCP.
Tên người dùng này cần phải duy nhất. Cụ thể, có hai định dạng được khuyến nghị:
Định dạng 1: <OUI> "-" <ProductClass> "-" <SerialNumber>
Định dạng 2: <OUI> "-" <SerialNumber>
OUI là viết tắt của "Organizationally Unique Identifier" (Biểu识 duy nhất tổ chức).
Tuy nhiên, các định dạng này không bắt buộc. Tôi thấy rằng một số hệ thống trong nước sử dụng chuỗi ngẫu nhiên làm tên người dùng. Mật khẩu phải khác nhau đối với mỗi thiết bị CPE.