我正在构建一些网络分析工具,但我在检查 NodeJS 应用程序中的 DNSSEC 合规性时遇到了一些困难。标准库中的dns
模块似乎不接受任何 DNSSEC 记录类型。我正在尝试查找rrsig
、ds
、nsec
、nsec3
,但文档没有将它们列为要解决的有效 rrtype。是否可以使用 NodeJS?
除非您计划在 Javascript 中实现 DNSSEC 验证(祝你好运!),否则您将依赖于某些外部验证器来指示有效、无效或不安全(未配置 DNSSEC)。世界上最大的 DNSSEC 验证器在 Google Public DNS(更广为人知的名称为 8.8.8.8)中,他们方便地添加了一个基于 HTTPS 的 API,应该很容易从您的 Node.js 代码中使用(API 响应是 JSON)。
您可以使用和不使用 &cd=1 参数检查解析是否成功,以禁用 DNSSEC 验证:
- 两个查询的 SERVFAIL("状态":2)都是错误的委派
- 仅没有 &cd=1 的 SERVFAIL 是无效的 DNSSEC 配置 成功("状态":
- 0)但没有经过身份验证的数据("AD":假)是非 DNSSEC 区域
- 成功使用经过身份验证的数据("AD":true)是有效的 DNSSEC 配置
唯一的缺点是这些是远程 Web API 调用,但即使使用本地验证解析器,您也依赖于远程 DNS 查询,因此没有太大区别(缓存除外)。
如果要生成有关无效 DNSSEC 配置的特定问题的诊断,则需要直接查询特定于 DNSSEC 的记录类型(这适用于 DS、DNSKEY、NSEC、NSEC3、NSEC3PARAM 和 RRSIG - 但您必须自己使用NSEC3PARAM数据生成 NSEC3 哈希名称,这将很痛苦)