术语表

名称约束 (Name Constraints)

最后核实

定义

名称约束是 CA 证书中的 X.509 扩展,用来限定该 CA 之下签发的证书只能包含哪些域名、IP 段、邮箱或 DN。

名称约束(Name Constraints)在 RFC 5280 中定义,包含 permittedSubtrees(允许的子树)和 excludedSubtrees(排除的子树)。验证方会把它应用到链上位于该 CA 之下的所有证书:主体和 SAN 中的每个名称都必须落在某个允许子树内,并且不落在任何排除子树内。对 DNS 名称而言,约束 example.com 会匹配 example.com 本身以及 api.example.com 等所有子域名;IP 约束则写成“地址/掩码”的形式。

为什么重要

名称约束能把 CA 变成“技术上受限”的 CA。企业可以运营一个只允许签发自家域名的 下级 CA,或者搭建一个 私有 CA,即使它的根证书装进了员工电脑,也无法被用来冒充外部网站。这样一来,信任合作方、外包商或集团子公司的内部根证书,风险就小得多。各平台和 TLS 库对名称约束的支持历史上并不一致,正式依赖之前,应在实际使用的客户端上逐一测试。

例子

nameConstraints = critical, permitted;DNS:example.com, permitted;IP:10.0.0.0/255.0.0.0

写在 OpenSSL 扩展配置段中,表示该 CA 只能签发 example.com 及其子域名、10.0.0.0/8 网段的证书。

常见误区

  • 名称约束可以写在终端证书里。 它只在 CA 证书中有意义,用来约束其下方签发的证书。
  • 约束 example.com 不包括子域名。 对 DNS 名称来说,它覆盖该域名及其下的所有名称。
  • 名称约束能阻止 CA 签发其他名称。 CA 仍然可以签任何内容,拒绝越界证书的是客户端,所以客户端是否支持才是关键。

延伸阅读