7. 安全考虑
7. 安全考虑
7.1. 固定证书
如 Section 1.8 所定义, 当用户明确选择将某个服务的证书与某个 DNS 域名关联时, 即使该证书包含的是其他 DNS 域名, 也称该证书被 "固定" 到该 DNS 域名 (例如, 用户明确批准将 "apps.example.net" 作为与源域 "example.com" 相关联的域). 缓存的名称关联必须同时考虑所呈现的证书以及该证书被接受或配置时的上下文 (其中 "上下文" 包括从所呈现证书到信任锚的证书链, 源域, 应用服务类型, 服务派生出的域和端口号, 以及用户提供或客户端关联的任何其他相关信息).
7.2. 通配符证书
本文档声明, 所呈现的标识符不应包含通配符字符 '*', 但应用客户端可以检查该字符 (主要是为了与已部署基础设施保持向后兼容性). 因此, 本文档给出的规则比许多现有应用技术的规则更严格 (例如 Appendix B 摘录的那些规则). 若干安全考虑可以说明为什么需要收紧这些规则:
-
通配符证书会自动为其域内任意和全部主机名背书. 这对管理员来说可能很方便, 但也带来为恶意或有缺陷的主机背书的风险. 例如见 [Defeating-SSL] (从幻灯片 91 开始) 和 [HTTPSbytes] (幻灯片 38-40).
-
现有应用技术的规范对于通配符字符允许出现的位置并不清晰或一致, 例如它是否可以是:
-
仅作为完整的最左侧标签 (例如 *.example.com)
-
最左侧标签的一部分 (例如 fo*.example.com, f*o.example.com 或 *oo.example.com)
-
非最左侧标签的全部或一部分 (例如 www.*.example.com 或 www.foo*.example.com)
-
标识所谓 "公共后缀" 的标签的全部或一部分 (例如 *.co.uk 或 *.com)
-
在给定标签中出现多次 (例如 fbr.example.com
-
作为多个标签的全部或一部分出现 (例如 ..example.com)
这些歧义可能导致不同客户端实现之间的身份检查行为出现可被利用的差异, 并使过于复杂且低效的身份检查算法变得必要.
-
-
没有任何规范定义通配符字符可如何嵌入国际化域名 [IDNA-PROTO] 的 A-label 或 U-label [IDNA-DEFS] 中. 因此, 强烈不建议实现包含或尝试检查嵌入国际化域名的 A-label 或 U-label 中的通配符字符 (例如 "xn--kcry6tjko*.example.org"). 但请注意, 只要该字符占据完整的最左侧标签位置, 且所有其余标签都是有效的 NR-LDH label, A-label 或 U-label, 所呈现的域名标识符可以包含通配符字符 (例如 "*.xn--kcry6tjko.example.org").
尽管存在上述安全考虑, 复用本规范的规范如果有充分理由, 仍可合理地鼓励继续支持通配符字符, 例如为了与已部署基础设施保持向后兼容性 (例如见 [EV-CERTS]).
7.3. 国际化域名
允许使用国际化域名可能导致证书中包含视觉上相似的字符 (即所谓 "易混淆" 字符). 相关讨论例如见 [IDNA-DEFS].
7.4. 多个标识符
出于多种原因, 某个给定应用服务可能通过多个 DNS 域名寻址, 某个给定部署也可能服务多个域 (例如在所谓 "虚拟主机" 环境中). 多个标识符的使用按如下方式处理:
在默认 TLS 握手交换中, 客户端无法指明它希望与之通信的 DNS 域名, TLS 服务器也只为自身返回一个证书. 在没有 TLS 扩展的情况下, 为了便于将一个应用服务映射到多个 DNS 域名, 典型的变通做法是把所有域名都嵌入单个证书.
一种较新的方法已在 [TLS-EXT] 中正式规定: 客户端在发送 client_hello 消息时使用 TLS "Server Name Indication" (SNI) 扩展, 指明它希望或期望该服务使用的 DNS 域名. 随后, 服务可以在其 Certificate 消息中返回适当的证书, 且该证书可以表示单个 DNS 域名.
为适应 SNI 扩展出现之前所需的变通做法, 本规范允许一个证书中包含多个 DNS-ID, SRV-ID 或 URI-ID. 但是, 本规范明确不鼓励包含多个 CN-ID. 尽管完全禁止多个 CN-ID 会更好, 但目前本规范声明它们不应被包含 (而不是禁止被包含) 有以下几个原因:
-
至少有一个重要的相关技术社区明确允许多个 CN-ID [EV-CERTS].
-
已知至少有一个重要认证机构会颁发包含多个 CN-ID 的证书.
-
许多服务提供者通常认为, 在虚拟主机环境中包含多个 CN-ID 是必要的, 因为至少有一个广泛部署的操作系统尚不支持 SNI 扩展.
希望未来可以进一步收紧关于多个 CN-ID 的建议.