摘要
- 经 DNSSEC 认证的 SSHFP 匹配,可以把所呈现 SSH 主机密钥的算法与指纹绑定到一个确定的 DNS owner name;它不证明这个名称就是用户想访问的服务,也不携带端口、用户或命令。
- 完整决策由名称选择、DNSSEC 状态、算法与摘要精确比较、SSH 私钥持有证明和客户端本地策略共同构成;轮换还必须协调 DNS 缓存与 known_hosts 两套时钟。
正确证明落在了错误对象上
开篇场景没有伪造签名。解析器选出完整名称,验证链认证 SSHFP RRset,服务器用对应私钥签署 SSH 交换数据。缺失的是更早的问题:谁证明 db 应当补成这个名称?
RFC 4255 专门警告非完整名称。若攻击者能注入解析搜索路径,客户端可能被带到另一台主机;标准建议这种情况下先检查本地数据库。DNSSEC 能让答案真实,却不能让问题自动正确。
日志必须分开记录原始参数、规范化名称、搜索后缀或 CNAME 决策、SSHFP owner、目标地址与端口。把它们压成一个“host”,等于删除了权限转移发生的位置。
SSHFP 实际承载什么
SSHFP 是 DNS RR type 44。RDATA 只有公钥算法编号、指纹类型和指纹;owner name 位于记录外层。匹配要求服务器公钥算法与编号一致,并用指定摘要算法对公钥 blob 计算出相同指纹。
比较不能替代 SSH 密钥交换。服务器仍须用主机私钥签署交换材料,证明本次会话中持有私钥。但持有不等于独占:被复制的私钥同样能生成有效签名。
格式中也没有端口、用户名、命令、IP、业务角色和有效期。host.example 的匹配不能独自决定 22 端口、另一个 SSH daemon、跳板机或生产角色是否属于同一权限对象。
Secure 是状态,不是万能批准
RFC 4255 要求:若验证所用 SSHFP 未被可信 DNS 签名认证,就不得依靠该方法信任主机密钥。客户端可本地验证;若委托递归验证器,通往验证器的路径也必须受保护。
Secure、Insecure、Bogus、Indeterminate 不能归并。Secure 表示数据在接受的信任锚下通过验证;Insecure 表示链条确认其未受保护;Bogus 表示本应验证却失败;Indeterminate 表示信任信息不足。
Insecure 下的相同指纹可以是提示,却不获得自动信任。Bogus 不得为可用性而降格。即使 Secure,也只认证被查询 owner 下的 RRset,不认证 DHCP 搜索后缀或名称规范化是否符合人的意图。
更强摘要说“不”时不能向下寻找“是”
IANA 当前登记 RSA、DSA、ECDSA、Ed25519、Ed448,以及 SHA-1 与 SHA-256 指纹类型。登记说明互操作编码,不证明客户端实际支持或启用。
RFC 6594 的关键不是多一个编号,而是负面规则:支持 SHA-256 的实现遇到 SHA-1 与 SHA-256 并存时必须优先 SHA-256;若 SHA-256 不匹配,必须拒绝密钥,不能再用匹配的 SHA-1 兜底。
因此遥测需要保存 owner、密钥算法、指纹类型、计算值和每次结果,不能只写 sshfp=match。
最终分支仍在本地
RFC 4255 允许客户端通过策略安排 SSHFP、本地文件等方法的顺序。当前 OpenSSH 文档显示 VerifyHostKeyDNS 默认是 no;设为 yes 时,匹配 Secure 指纹的密钥会被隐式信任,非安全指纹按 ask 处理;设为 ask 时仍由 StrictHostKeyChecking 决定新密钥确认。
用户与全局 known_hosts、Host/Match、名称规范化、允许的 CNAME 和配置优先级都会改变结果。事故证据应保存实际生效配置,而不是操作者以为加载的文件。
端口与路径在记录之外
OpenSSH 的 known_hosts 维护支持 [hostname]:port,ssh-keygen -r 则按 hostname 生成 SSHFP。这揭示结构差异:本地 pin 可限定端口,SSHFP RDATA 不可。
同一名称下两个端口若呈现不同密钥,应用必须另定策略。经跳板连接时,终点 SSHFP 也不会顺带认证跳板;每条实质 transport leg 都需要自己的主机密钥结论。
轮换有两套时间
RFC 4255 允许用替换 SSHFP 分发新密钥;若本地策略强制 SSHFP,删除记录也可参与撤销。但权威区删除不等于全网缓存立即拒绝。TTL、RRSIG 窗口和客户端本地 pin 各自运行。
稳健轮换先通过受认证登记路径发布新指纹,在关键验证器上观察传播,保持有限重叠,再切换 daemon、移除旧记录,并在缓存到期后验证旧密钥被拒绝。紧急妥协可选择停机,但必须明确记录风险决定。
主机身份不是用户权限
SSH 架构把 transport 层服务器认证与用户认证分开。主机密钥通过,只说明与所选服务器建立了受保护通道;它不接受用户密钥、shell、转发或命令。
自动化若把“SSH 主机已验证”直接变成部署秘密或执行维护的许可,就跨越了最后一道边界。账户、命令、变更范围与幂等性都有独立权限。
保留名词的负面测试
让同一短名在两个搜索路径下解析;分别测试 Secure、Insecure、Bogus、Indeterminate;令 SHA-256 失败而 SHA-1 成功;制造本地 pin 冲突;测试双端口、跳板与复制私钥;最后让主机认证通过、用户与命令认证失败。
每个结果都应点名 owner、状态、信任锚、密钥、端口、连接段、本地策略和后续权限。目标不是一律拒绝,而是不让 pass 更换主语。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
