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