Kiểm tra DNSSEC: tên miền đã ký chưa, DS và DNSKEY có khớp nhau không
DNSSEC checker này hỏi trực tiếp hai resolver có xác thực DNSSEC là Google Public DNS và Cloudflare qua DNS over HTTPS để cho biết tên miền đã bật DNSSEC chưa, chuỗi tin cậy từ zone cha xuống có hợp lệ không, hay đang lỗi khiến người dùng không truy cập được. Công cụ liệt kê bản ghi DS, các khóa DNSKEY (KSK, ZSK, thuật toán, độ dài khóa), chữ ký RRSIG và ngày hết hạn, đồng thời tự tính lại key tag và digest DS trên trình duyệt để chỉ ra DS nào khớp khóa nào.
Tính năng nổi bật
- Truy vấn song song Google Public DNS (dns.google) và Cloudflare (cloudflare-dns.com) bằng DNS over HTTPS dạng JSON, có so kết luận giữa hai bên
- Tự tìm zone chứa tên miền (kể cả khi nhập tên miền con hay tên là CNAME), chấp nhận cả tên miền tiếng Việt có dấu và đổi sang punycode
- Kết luận một trong các trạng thái: đã ký và hợp lệ, không ký, có DNSKEY nhưng chưa có DS, có DS nhưng lỗi xác thực, có DS nhưng không có cờ AD
- Phân biệt SERVFAIL do DNSSEC bằng cách hỏi lại với cờ cd=1 (tắt kiểm tra); hiện mã lỗi mở rộng EDE nếu resolver trả về
- Liệt kê bản ghi DS ở zone cha: key tag, thuật toán, loại digest, chuỗi digest
- Tính key tag của từng DNSKEY theo RFC 4034 phụ lục B và tính lại digest DS bằng Web Crypto (SHA-1, SHA-256, SHA-384) để đánh dấu DS khớp, lệch digest hay không có khóa tương ứng
- Bảng DNSKEY: KSK hay ZSK, flags, thuật toán và mức khuyến nghị theo RFC 8624, độ dài khóa RSA tính từ modulus, khóa bị thu hồi
- Bảng chữ ký RRSIG trên DS, DNSKEY và SOA của zone: thuật toán, key tag, bên ký, thời điểm hiệu lực, hết hạn, số ngày còn lại
- Cảnh báo chữ ký sắp hết hạn trong 3 ngày hoặc đã hết hạn, digest SHA-1, thuật toán ký đã lỗi thời, hai resolver cho kết quả khác nhau
- Nút thử nhanh với tên miền mẫu (gồm dnssec-failed.org, tên miền cố ý cấu hình sai) và nút Chép kết quả
Vì sao nên kiểm tra DNSSEC
DNSSEC thêm chữ ký số vào câu trả lời DNS để resolver phát hiện được dữ liệu bị giả mạo trên đường đi, ví dụ tấn công đầu độc bộ nhớ đệm DNS. Nhưng DNSSEC cũng là thứ dễ làm hỏng tên miền nhất trong cấu hình DNS: chỉ cần chuyển nhà cung cấp DNS mà quên gỡ DS cũ ở nhà đăng ký, hay máy chủ ngừng ký lại chữ ký đúng hạn, là mọi người dùng Google Public DNS, Cloudflare 1.1.1.1 và nhiều nhà mạng có xác thực DNSSEC sẽ không phân giải được tên miền, trong khi người dùng resolver không xác thực vẫn vào bình thường. Lỗi kiểu này khó nhận ra nếu chỉ thử trên máy mình. Công cụ hỏi cùng lúc hai resolver xác thực lớn, so sánh trả lời khi bật và tắt kiểm tra, và tính lại DS từ DNSKEY để chỉ ra chính xác mắt xích nào hỏng trước khi khách hàng phản ánh.
Lợi ích khi sử dụng
- Biết ngay tên miền có đang bị lỗi DNSSEC làm mất truy cập với một phần người dùng hay không
- Kiểm tra lại sau khi bật DNSSEC ở nhà cung cấp DNS và nộp DS ở nhà đăng ký
- Phát hiện DS cũ còn sót sau khi chuyển nhà cung cấp DNS, nguyên nhân hay gặp gây lỗi
- Thấy trước chữ ký sắp hết hạn để báo bên quản trị máy chủ DNS
- Có bằng chứng cụ thể (key tag, digest tính lại, mã lỗi EDE) khi làm việc với bộ phận hỗ trợ
- Không cần cài dig hay delv, chạy được trên điện thoại
Cách kiểm tra DNSSEC của tên miền
- 1Gõ tên miền vào ô Tên miền, ví dụ tanphatdigital.com. Có thể dán cả địa chỉ có https:// và đường dẫn, công cụ tự lấy phần tên miền.
- 2Bấm Kiểm tra DNSSEC, hoặc bấm một tên miền mẫu ở dòng Thử nhanh để xem kết quả của tên miền đã ký, chưa ký và cố ý lỗi.
- 3Đọc khung kết luận màu: xanh là đã ký và hợp lệ, cam là chưa ký hoặc chưa đủ, đỏ là lỗi xác thực hoặc tên miền không tồn tại. Đọc thêm khung cảnh báo nếu có.
- 4Xem bảng Kết quả từ resolver có xác thực để so mã trả lời, cờ AD và trả lời khi tắt kiểm tra (cd=1) của Google và Cloudflare.
- 5Xem phần Bản ghi DS ở zone cha và bảng DNSKEY để biết DS nào khớp khóa nào, khóa dùng thuật toán gì, dài bao nhiêu bit.
- 6Xem bảng Chữ ký RRSIG để biết chữ ký còn bao nhiêu ngày, rồi bấm Chép kết quả để gửi cho nhà cung cấp DNS hoặc nhà đăng ký tên miền.
DNSSEC hoạt động thế nào
DNSSEC được định nghĩa trong RFC 4033, 4034 và 4035. Mỗi zone tự ký các tập bản ghi của mình bằng khóa bí mật và công bố khóa công khai trong bản ghi DNSKEY; chữ ký nằm trong bản ghi RRSIG đi kèm từng tập bản ghi. Để resolver tin khóa DNSKEY là thật, zone cha lưu một bản ghi DS chứa digest (giá trị băm) của khóa đó và tự ký bản ghi DS bằng khóa của zone cha. Cứ thế đi lên tới vùng gốc, nơi resolver có sẵn khóa tin cậy (trust anchor). Vùng gốc được ký từ năm 2010; tại thời điểm viết, tập DNSKEY của vùng gốc có hai khóa ký khóa với key tag 20326 và 38696, do IANA công bố. Resolver xác thực thành công thì đặt cờ AD (Authenticated Data) trong câu trả lời. Nếu một mắt xích sai, resolver trả SERVFAIL thay vì trả dữ liệu có thể đã bị giả mạo.
Cách công cụ kết luận trạng thái
Công cụ hỏi bốn câu cho mỗi resolver. Thứ nhất, bản ghi DS của zone: có DS nghĩa là zone cha đã nhận khóa của bạn. Thứ hai, DNSKEY của zone với cờ cd=1 để lấy được khóa kể cả khi xác thực lỗi. Thứ ba, bản ghi SOA của zone theo cách bình thường, xem mã trả lời và cờ AD. Kết luận dựa trên SOA của zone chứ không dựa trên bản ghi A của tên miền con, vì tên con hay là CNAME trỏ sang CDN chưa ký, làm mất cờ AD dù zone của bạn ký đúng; nếu chính tên bạn nhập không tồn tại, trang báo tên miền không tồn tại. Thứ tư, cùng câu đó nhưng đặt cd=1 (Checking Disabled), yêu cầu resolver bỏ qua kiểm tra DNSSEC. Nếu câu thường trả SERVFAIL mà câu cd=1 trả lời được, lỗi chắc chắn nằm ở DNSSEC chứ không phải máy chủ DNS ngừng hoạt động. Có DS và có cờ AD là đã ký và hợp lệ. Không có DS lẫn DNSKEY là chưa bật DNSSEC. Có DNSKEY mà chưa có DS là máy chủ DNS đã ký nhưng chưa nộp DS lên nhà đăng ký, tên miền vẫn chạy bình thường như chưa ký. Google và Cloudflare đôi khi trả kèm mã lỗi mở rộng EDE (RFC 8914), ví dụ EDE 9 là không tìm thấy DNSKEY khớp DS; công cụ hiện nguyên văn ghi chú này.
Key tag và digest DS được tính lại ra sao
Key tag là số 16 bit dùng để nhanh chóng tìm khóa mà một DS hay RRSIG nhắc tới. Theo RFC 4034 phụ lục B, key tag là tổng kiểu checksum trên toàn bộ RDATA của DNSKEY: flags, protocol, thuật toán và khóa công khai, cộng các byte ở vị trí chẵn dịch trái 8 bit với các byte ở vị trí lẻ, rồi gấp phần tràn vào 16 bit. Digest DS theo RFC 4034 mục 5.1.4 là giá trị băm của tên chủ zone ở dạng wire chữ thường nối với RDATA của DNSKEY; SHA-256 theo RFC 4509 và SHA-384 theo RFC 6605. Công cụ dùng Web Crypto của trình duyệt để băm, nên tính được SHA-1, SHA-256, SHA-384; loại GOST thì không. Key tag có thể trùng giữa hai khóa khác nhau, vì vậy công cụ so cả thuật toán và digest chứ không chỉ key tag. Phần kiểm thử của công cụ đã đối chiếu với khóa vùng gốc do IANA công bố và với DS thật của vài tên miền, cả loại SHA-256 lẫn SHA-384.
KSK, ZSK và thuật toán ký
Phần lớn zone dùng hai loại khóa. Khóa ký khóa (KSK) có flags 257, tức bật bit SEP, chỉ dùng để ký tập DNSKEY và là khóa mà DS ở zone cha trỏ tới. Khóa ký zone (ZSK) có flags 256, dùng để ký các bản ghi còn lại và có thể đổi thường xuyên mà không phải sửa DS ở nhà đăng ký. Một số nhà cung cấp như Cloudflare dùng một cặp khóa thuật toán 13 (ECDSA P-256 với SHA-256), khóa ngắn và chữ ký nhỏ. Thuật toán 8 (RSA với SHA-256) vẫn phổ biến, độ dài khóa thường 2048 bit cho KSK. RFC 8624 khuyến nghị không ký bằng RSASHA1 (5, 7) và cấm các thuật toán cũ như RSAMD5, DSA, GOST; với digest DS, không nên tạo loại SHA-1 nữa mà dùng SHA-256. Công cụ hiện mức khuyến nghị cạnh từng thuật toán và cảnh báo khi gặp loại lỗi thời.
Những lỗi DNSSEC hay gặp
Lỗi phổ biến nhất là chuyển tên miền sang nhà cung cấp DNS mới mà không gỡ DS cũ ở nhà đăng ký: zone cha vẫn trỏ tới khóa của nhà cung cấp cũ, khóa mới không khớp, mọi resolver xác thực trả SERVFAIL. Cách xử lý là gỡ DS cũ, hoặc bật DNSSEC ở nhà cung cấp mới rồi thay DS mới. Lỗi thứ hai là chữ ký hết hạn vì máy chủ tự quản không chạy lại việc ký định kỳ; bảng RRSIG cho thấy số ngày còn lại. Lỗi thứ ba là đổi KSK quá vội: gỡ khóa cũ trước khi DS mới kịp lan truyền theo TTL. Lỗi thứ tư là nhập sai DS ở nhà đăng ký, ví dụ chép nhầm digest hoặc chọn sai loại thuật toán; khi đó công cụ báo Digest không khớp hoặc Không có DNSKEY tương ứng. Một DS không có khóa tương ứng không phải lúc nào cũng là lỗi: trong quy trình đổi khóa, DS mới có thể được đặt trước khi khóa mới xuất hiện, miễn là vẫn còn ít nhất một DS khớp.
Bật DNSSEC cho tên miền cần làm gì
Việc bật DNSSEC luôn gồm hai bên. Bên giữ zone DNS (Cloudflare, nhà cung cấp hosting, máy chủ DNS riêng) bật chức năng ký và cho bạn thông tin DS gồm key tag, thuật toán, loại digest và chuỗi digest, hoặc cho khóa DNSKEY để nhà đăng ký tự tính. Bên nhà đăng ký tên miền, nơi bạn mua tên miền, phải có ô khai báo DS để gửi lên zone cha (.com, .vn, .net…). Nếu bên giữ DNS và bên đăng ký là một, thường chỉ cần bật một công tắc. Sau khi nộp DS, đợi zone cha cập nhật và TTL cũ hết, rồi dùng công cụ này kiểm tra: trạng thái phải là đã ký và hợp lệ ở cả Google lẫn Cloudflare. Trước khi chuyển nhà cung cấp DNS, hãy tắt DNSSEC và gỡ DS trước, đợi TTL, rồi mới chuyển, sau đó bật lại ở nơi mới. Một số đuôi tên miền hay nhà đăng ký chưa hỗ trợ khai báo DS; khi đó tên miền chỉ có thể ở trạng thái không ký.
Khác gì công cụ tra cứu DNS thông thường
Công cụ tra cứu DNS cho biết bản ghi A, MX, TXT của tên miền là gì. Công cụ này không liệt kê các bản ghi đó mà chỉ tập trung vào chuỗi tin cậy DNSSEC: DS, DNSKEY, RRSIG, cờ AD và cách resolver phản ứng khi bật, tắt kiểm tra. Giới hạn cần biết: trình duyệt không tự kiểm tra lại chữ ký mật mã của từng RRSIG mà dựa vào kết quả xác thực của Google và Cloudflare; key tag và digest DS thì được tính lại độc lập. Công cụ hỏi qua hai resolver công cộng có bộ nhớ đệm, nên ngay sau khi sửa DS hoặc khóa, kết quả có thể còn cũ trong khoảng thời gian bằng TTL. Muốn phân tích chuỗi chi tiết theo từng máy chủ có thẩm quyền, nên dùng thêm các công cụ chuyên sâu như DNSViz hay lệnh delv, dig +dnssec.
Câu hỏi thường gặp (FAQ)
DNSSEC là gì?
DNSSEC là phần mở rộng bảo mật của DNS, thêm chữ ký số vào câu trả lời để resolver kiểm tra dữ liệu có đúng do chủ tên miền phát hành và không bị sửa trên đường đi. Nó không mã hóa truy vấn, chỉ chống giả mạo.
Làm sao biết tên miền đã bật DNSSEC chưa?
Nhập tên miền và bấm Kiểm tra DNSSEC. Nếu có bản ghi DS ở zone cha và resolver trả cờ AD, công cụ báo Đã ký và hợp lệ. Nếu không có DS, tên miền chưa bật DNSSEC.
Cờ AD là gì?
AD (Authenticated Data) là cờ resolver đặt trong câu trả lời khi đã xác thực xong chuỗi chữ ký DNSSEC từ vùng gốc xuống. Không có AD nghĩa là dữ liệu chưa được xác thực, có thể vì tên miền không ký hoặc thuật toán không được hỗ trợ.
SERVFAIL do DNSSEC khác SERVFAIL thường thế nào?
Công cụ hỏi lại với cờ cd=1 để tắt kiểm tra DNSSEC. Nếu khi đó resolver trả lời được, lỗi nằm ở DNSSEC (chữ ký hoặc khóa không khớp DS). Nếu vẫn SERVFAIL, máy chủ DNS của tên miền đang có vấn đề khác.
Bản ghi DS là gì, lấy ở đâu?
DS là bản ghi ở zone cha (ví dụ .com, .vn) chứa digest của khóa KSK của bạn, nối zone của bạn vào chuỗi tin cậy. Nhà cung cấp DNS tạo thông tin DS khi bạn bật DNSSEC, còn bạn khai báo nó ở nhà đăng ký tên miền.
KSK và ZSK khác nhau thế nào?
KSK (flags 257) ký tập khóa DNSKEY và là khóa mà DS trỏ tới. ZSK (flags 256) ký các bản ghi còn lại của zone. Tách hai khóa giúp đổi ZSK thường xuyên mà không phải sửa DS ở nhà đăng ký. Một số hệ thống dùng một khóa cho cả hai việc.
Key tag là gì?
Là số 16 bit tính từ nội dung DNSKEY theo RFC 4034, dùng để DS và RRSIG chỉ ra khóa nào được nhắc tới. Key tag không phải duy nhất, nên công cụ so thêm thuật toán và digest khi ghép DS với DNSKEY.
Vì sao DS báo Không có DNSKEY tương ứng?
Zone không phát hành khóa nào có cùng key tag và thuật toán với DS đó. Có thể là DS cũ còn sót sau khi đổi nhà cung cấp, DS nhập sai, hoặc DS đặt trước cho lần đổi khóa. Nếu không còn DS nào khớp, tên miền sẽ lỗi xác thực.
Chuyển DNS sang Cloudflare có cần tắt DNSSEC không?
Nên tắt DNSSEC và gỡ DS ở nhà đăng ký trước khi đổi máy chủ tên, đợi TTL hết, rồi mới chuyển. Sau khi zone chạy ổn ở Cloudflare, bật DNSSEC tại đó và nộp DS mới. Làm ngược lại dễ gây lỗi xác thực trong thời gian chuyển.
Chữ ký RRSIG hết hạn thì sao?
Resolver xác thực sẽ coi dữ liệu là không hợp lệ và trả SERVFAIL. Nhà cung cấp DNS có quản lý thường tự ký lại. Nếu bạn tự chạy máy chủ DNS, cần đảm bảo tác vụ ký lại chạy đều; công cụ cảnh báo khi chữ ký còn dưới 3 ngày.
Vì sao Google và Cloudflare cho kết quả khác nhau?
Mỗi resolver có bộ nhớ đệm riêng, nên ngay sau khi đổi DS hoặc khóa, một bên có thể còn giữ dữ liệu cũ tới khi hết TTL. Cũng có trường hợp hai bên hỗ trợ thuật toán khác nhau. Chờ một lúc rồi kiểm tra lại.
Bật DNSSEC trên GoDaddy, Namecheap hay nhà đăng ký khác thế nào?
Cách làm giống nhau ở mọi nhà đăng ký: nếu dùng DNS của chính nhà đăng ký, bật mục DNSSEC trong trang quản lý DNS là họ tự ký zone và tự nộp DS. Nếu DNS đặt ở nơi khác (Cloudflare, máy chủ riêng), bật ký zone ở nhà cung cấp DNS trước, lấy bốn giá trị key tag, algorithm, digest type, digest của bản ghi DS, rồi nhập vào mục DNSSEC của nhà đăng ký. Sau khi zone cha cập nhật, thường trong vài giờ, chạy lại DNSSEC checker này để thấy trạng thái Đã ký và hợp lệ.
Công cụ có test được resolver của mạng nhà tôi có xác thực DNSSEC không?
Không. Trang gửi truy vấn qua DNS over HTTPS tới Google và Cloudflare, nên chỉ cho biết tên miền đã ký đúng hay chưa, không đo được resolver mà máy bạn đang dùng. Muốn biết resolver hiện tại có xác thực không, hãy mở dnssec-failed.org bằng trình duyệt: nếu trang mở được là resolver không xác thực, nếu báo lỗi không phân giải được là resolver có xác thực.
Tên miền .vn có bật DNSSEC được không?
Zone .vn đã được ký, ví dụ vnnic.vn có DS ở zone .vn và công cụ kiểm tra được. Việc bạn khai báo được DS hay không còn phụ thuộc nhà đăng ký tên miền và nhà cung cấp DNS bạn đang dùng.
DNSSEC có làm website chậm hơn không?
Câu trả lời DNS lớn hơn một chút vì kèm chữ ký, và resolver phải xác thực, nhưng kết quả được lưu đệm nên người dùng gần như không thấy khác biệt. Rủi ro lớn hơn là cấu hình sai làm mất truy cập, vì vậy cần kiểm tra sau mỗi thay đổi.
Công cụ có tự kiểm tra chữ ký RRSIG không?
Không kiểm tra lại chữ ký mật mã. Công cụ dựa vào cờ AD và mã trả lời của Google, Cloudflare để biết xác thực có thành công, còn key tag và digest DS thì tính lại độc lập trên trình duyệt.
Truy vấn có đi qua máy chủ của Tấn Phát Digital không?
Không. Trình duyệt gửi truy vấn thẳng tới dns.google và cloudflare-dns.com bằng DNS over HTTPS. Hai nhà cung cấp này thấy tên miền bạn hỏi và IP của bạn như khi bạn dùng dịch vụ DNS của họ.
dnssec-failed.org trong phần thử nhanh là gì?
Là tên miền được cố ý cấu hình sai DNSSEC để kiểm tra resolver có xác thực hay không. Resolver xác thực sẽ trả SERVFAIL, còn khi đặt cd=1 thì trả lời được, đúng mẫu lỗi xác thực mà công cụ nhận diện.
Từ khóa liên quan
- dnssec
- dnssec check
- dnssec checker
- dnssec test
- kiểm tra dnssec
- dnssec là gì
- dnssec analyzer
- dnssec debugger
- dnssec resolver test
- dnssec cloudflare
- dnssec godaddy
- dnssec namecheap
- bản ghi ds là gì
- dnskey là gì
- ksk zsk
- rrsig hết hạn
- cờ ad dns
- servfail dnssec
- dnssec tên miền .vn
- cách bật dnssec
- dns over https