面试题:如何安全迁移 HTTPS/SVCB DNS 记录并验证客户端兼容性?
题目
为一个同时提供 HTTP/2、HTTP/3 的域名设计 HTTPS(SVCB)记录迁移方案。要求支持灰度、回滚,并能解释解析器、客户端和证书配置不一致时的故障定位方法。
场景与约束
权威 DNS 由多家供应商托管,旧客户端仍只查询 A/AAAA。新记录不能改变不支持该类型客户端的可用性;DNS TTL 为 300 秒,发布窗口内不能停止服务。
核心考点
考察候选人是否理解 RFC 9460 的 AliasMode 与 ServiceMode、SvcPriority 与参数继承,能把 DNS 缓存传播、TLS 证书、HTTP/3 协商和回滚组合成可观测的发布流程。
参考解法
先保持现有 A/AAAA 与 TLS 配置,验证权威服务器能返回类型 65。需要顶点别名时使用 AliasMode(优先级 0 且目标名非根),需要声明 ALPN、端口或备用端点时使用 ServiceMode。先在低流量子域发布 alpn=h2,h3,观察解析成功率、握手错误和协议分布,再扩大到主域。
客户端若忽略 HTTPS 记录,应继续按 A/AAAA 建立连接。回滚时撤回新记录并等待旧 TTL 加上递归解析器保留时间;不能只删除权威记录就假设缓存立即消失。
关键细节
SvcPriority=0 表示 AliasMode;ServiceMode 应使用非零优先级。参数中的目标主机必须有匹配证书,port、alpn 等键要与监听器和防火墙一致。记录变更前后分别从多个递归解析器查询,并用支持与不支持类型 65 的客户端做对照。
常见误区
把 HTTPS 记录当成 CNAME 替代品而删除 A/AAAA;只在本地缓存验证;把 h3 宣告当成服务器已经能完成 QUIC;忽略证书 SAN 与 AliasMode 目标名;用单一地区的成功率代表全球传播。
评估标准
优秀答案能画出权威 DNS、递归解析器、客户端和 TLS 终点的数据流,明确灰度指标、回滚时间窗和兼容性矩阵,并指出记录优先级与参数错误分别会产生什么现象。一般答案只会给出一条记录,无法解释旧客户端和缓存行为。
追问
如何验证 AliasMode 的目标名与证书关系?
查询别名目标的 A/AAAA 与 HTTPS 记录,检查客户端最终连接的主机名仍满足证书名称约束,并在 TLS 日志中核对 SNI。
如果只有部分地区出现 HTTP/3 失败,先查什么?
按递归解析器、Anycast DNS 节点和运营商拆分采样,比较返回的 HTTPS 记录、UDP 443 可达性、QUIC 版本与证书链,而不是立即回滚全部记录。
什么时候不应发布 alpn=h3?
当 QUIC 监听、证书、路径 MTU 或防火墙尚未在目标网络验证时,先仅声明已稳定的协议,待端到端指标达标后再加入 h3。