Appendix A. Out-of-Band Key-Pinned Privacy Profile Example (带外密钥固定隐私配置文件示例)
本节基于最小固定密钥集 (两个固定密钥) 展示了带外密钥固定隐私配置文件在实践中如何工作的示例.
DNS 客户端系统配置了来自网络服务的带外密钥固定隐私配置文件, 使用包含两个固定密钥的固定密钥集. 以 HTTP 公钥固定 (HTTP Public Key Pinning, HPKP) [RFC7469] 风格表示, 固定密钥是:
-
pin-sha256="FHkyLhvI0n70E47cJlRTamTrnYVcsYdjUGbr79CfAVI=" -
pin-sha256="dFSY3wdPU8L0u/8qECuz5wtlSgnorYV2f66L6GNQg6w="
客户端还配置其预期 DNS 服务器的 IP 地址: 可能是 192.0.2.3 和 2001:db8::2:4.
客户端在 TCP 端口 853 上连接到这些地址之一, 并开始 TLS 握手: 协商 TLS 1.2 与 Diffie-Hellman 密钥交换. 服务器发送一个包含三个证书 (A、B 和 C) 列表的证书消息, 并使用证书 A 中找到的公钥正确签署 ServerKeyExchange 消息.
客户端现在对证书 A 中的 SPKI 进行 SHA-256 摘要, 并将其与固定密钥集中的两个固定密钥进行比较. 如果任一固定密钥匹配, 则验证成功; 客户端继续 TLS 连接并可以进行其第一个 DNS 查询.
如果两个固定密钥都不匹配证书 A 的 SPKI, 客户端验证证书 A 实际上是由证书 B 颁发的. 如果是, 它对证书 B 中的 SPKI 进行 SHA-256 摘要, 并将其与固定密钥集中的两个固定密钥进行比较. 如果任一固定密钥匹配, 则验证成功. 否则, 它验证 B 是由 C 颁发的, 然后将固定密钥与 C 的 SPKI 的摘要进行比较.
如果加密有效的证书链中的所有 SPKI 都不匹配固定密钥集中的任何固定密钥, 则客户端关闭连接并报错, 并将 IP 地址标记为失败.