我正在尝试对私有 CA 证书设置允许的名称限制。例如,我的根证书有以下限制
X509v3 Name Constraints: critical
Permitted:
DNS:.mytestdomain.local
DNS:mytestdomain.local
我已为另一个域颁发了证书anothertestdomain.local
。通用名称和主题备用名称均设置为该域。在测试该证书的验证时,OpenSSL 和 Firefox 均按预期失败,并出现允许子树违规。但是,Chrome 接受该证书。这是 Chrome 下的预期情况吗?
我正在 Linux 上使用 Chromium 进行测试。
答案1
您可以使用BetterTLS检查各种客户端对名称约束的支持。它是开源的,由Netflix 团队。
BetterTLS 是针对 HTTPS 客户端的测试套件,用于实现名称约束证书扩展的验证。
它适用于浏览器和非浏览器客户端(如 Java 和 Python)。
答案2
根据此 Chromium 错误,您所体验到的是预期的功能。https://bugs.chromium.org/p/chromium/issues/detail?id=1072083
听起来您是在根证书上放置 nameConstraints,这不仅在 Chrome 中不受支持,而且在许多主要的 PKI 实现中也不受支持。这是因为 RFC 5280 不需要这样的支持;导入的根证书被视为信任锚(即,仅使用主题和 SPKI,而不使用其他扩展)。
如果您对中间件施加约束,这应该会按预期工作。net-internals 日志和完整链将有助于确认,在这种情况下,这可能是 WontFix/WorkingAsIntended。
我还没有验证过,但显然你所追求的功能在 MacOS 上的 Chromium 上运行良好(或曾经运行过),但这似乎是短暂的。
我想让我感到困惑的是,macOS 的 SSL 堆栈、最新的 OpenSSL 和最新稳定的 Firefox 都遵守根证书上的名称约束
是的,我们知道平台之间的不一致,我们正在将 Chrome 平台与 Linux 上的 Chrome 行为保持一致(即,将根证书视为信任锚)。Firefox 的更改是最近的更改,部分原因是受到公众信任的 CA 请求(希腊大学联盟)的推动