证书验证忽略通用名称而仅检查替代名称?

证书验证忽略通用名称而仅检查替代名称?

我有一张证书,CN=*.some.domain上面有备用名称DNS:*.sub1.some.domainDNS:*.sub2.some.domain(还有另外 2 个类似的)。

我向 kubernetes 中的 nginx-ingress 提供了证书,它提供服务host.some.domain。但它给出了错误:

controller.go:1041] unexpected error validating SSL certificate default/tls-cert for host dwarf30.epiqa.certicon.cz. Reason: x509: certificate is valid for *.sub1.some.domain, *.sub2.some.domain, not host.some.domain

值得注意的是,该消息没有提及通用名称,而仅列出了替代方案。

是我对 CN 和 Alternates 如何交互的误解,还是 nginx-ingress 控制器中的问题(注意:helm 坚持安装相当旧的容器版本 0.13.0)?

答案1

已经RFC 2818从 2000 年开始标准化 HTTPS (HTTP over TLS) 的明确规定:

如果存在 dNSName 类型的 subjectAltName 扩展,则必须将其用作身份。

由于您已将 DNS 名称作为主题备用名称,因此 CN 将被忽略。请注意,使用 CN 代替主题备用名称的做法已弃用多年,并且某些浏览器(特别是 Chrome)只会查看主题备用名称,如果不存在 SAN,即使 CN 可能与域匹配,也会失败。

相关内容