使用SAN证书时,公共名称无效

Jon*_*zee 7 ssl certificate ssl-certificate

我已经为内部服务器生成了一个证书,该证书也可以从外部访问.根据这个 SO答案,CN和SAN字段相互补充,因此我将CN设置为server.domain.local,在SAN中我有DNS:server.domain.tld

但是,至少使用Chrome,我可以浏览到server.domain.tld(SAN条目)而不会出现错误,但我在server.domain.local(CN)上遇到了常见的名称不匹配错误

这是Chrome上的NSS中的实现错误还是我做错了什么?我应该在SAN字段中同时拥有server.domain.local和server.domain.tld吗?

Ste*_*ich 8

.. CN和SAN领域相互补充..

这只适用于一般的PKI案例,但具体的协议具有不同的行为.用于在HTTPS中检查证书的相关RFC是RFC2818(或更高版本的RFC6125),其中规定:

If a subjectAltName extension of type dNSName is present, that MUST
be used as the identity. Otherwise, the (most specific) Common Name
field in the Subject field of the certificate MUST be used. Although
the use of the Common Name is existing practice, it is deprecated and
Certification Authorities are encouraged to use the dNSName instead.
Run Code Online (Sandbox Code Playgroud)

这意味着,如果您有SAN部分,它必须包含所有名称,因为不会检查CN.


jww*_*jww 5

CN和SAN字段相互补充,因此将CN设置为server.domain.local,在SAN中,我有DNS:server.domain.tld

不(但该职位现在有点旧了)。

IETF和CA /浏览器论坛均不赞成使用DNS名称作为通用名称(CN)。您应将所有DNS名称放在“使用者备用名称(SAN)”中。由于CN向用户显示,因此请使用CN作为友好名称,例如“ Example LLP”。

根据CA /浏览器基准要求(BR),CN中的DNS名称也必须存在于SAN中。参见CA / B BR第9.2节


至少是Chrome,我可以无错误地浏览到server.domain.tld(SAN条目),但在server.domain.local(CN)上却遇到了常见的名称不匹配错误

铬被正确地拒绝所述证书是否 server.domain.local 存在于所述CN,但存在于SAN英寸 如果两者都不存在,则违反CA / B BR。


我是否应该在SAN字段中同时包含server.domain.local和server.domain.tld

是的,将两个DNS名称都放在SAN中。不要在CN中放置DNS名称。使用CN作为友好名称。


为了完整性,CA / B代表CABrowsers。他们有自己的封闭式小俱乐部,并且有自己的一套颁发证书的政策。不要期望浏览器执行IETF文档中指定的操作。

并且,如果您要验证由CA / B成员CA颁发的在野外使用的X509证书,则应使用CA / B BR而非IETF文档进行验证。