SSL – 通用名称(CN)和主题备用名称(SAN)如何协同工作?

假设SSL证书的主题备用名称(SAN)属性包含两个DNS名称

  1. domain.tld
  2. host.domain.tld

但通用名称(CN)只能设置为以下两种之一: CN=domain.tld

  • 这个设置是否具有特殊的含义,或者在设置两个CN时有什么优势?
  • 如果正在请求另一个host.domain.tld ,服务器端会发生什么?

编辑:

就像最近Eugene的回答所了解到的那样,行为因实现而有所不同,我想要更具体一些: OpenSSL 0.9.8b +如何处理给定的场景?

这取决于实现,但是一般规则是,针对所有SAN和通用名称检查域。 如果在那里find域,那么证书就可以连接。

RFC 5280第4.1.2.6节规定:“主题名称可以在主题字段和/或主题名称扩展名中进行”。 这意味着必须根据证书的SubjectAltName扩展名和Subject属性(即通用名称参数)来检查域名。 这两个地方相辅相成,不重复。 并且SubjectAltName是放置其他名称的适当位置,例如www .domain.com或www2 .domain.com

更新:根据2011年发布的RFC 6125 ,validation者必须首先检查SAN,如果SAN存在,则不应检查CN。 请注意,RFC 6125是相对较新的,并且还存在颁发证书的证书和CA,其中包括CN中的“主”域名和SAN中的替代域名。 也就是说,如果SAN存在,通过validation排除CN,则可以拒绝一些其他有效的证书。

要绝对正确,你应该把所有的名字放到SAN领域。

CN域应该包含一个不是域名的Subject Name,但是当Netscape发现这个SSL时,他们错过了定义它最大的市场。 只是没有为服务器URL定义证书字段。

解决这个问题是为了将域名放入CN领域,现在CN域的使用已经被弃用,但是仍然被广泛使用。 CN只能容纳一个域名。

这一般的规则:CN – 在这里放置你的主要URL(兼容性)SAN – 把你所有的域名放在这里,重复CN,因为它不在正确的位置,但它用于…

如果你发现一个正确的实现,你的问题的答案将是以下内容:

  • 这个设置是否具有特殊的含义,或者在设置两个CN时有什么优势? 你不能设置两个CN,因为CN只能保存一个名字。 您可以使用2个简单的CN证书而不是一个CN + SAN证书,但是您需要2个IP地址。

  • 如果正在请求另一个host.domain.tld,服务器端会发生什么? 服务器端发生了什么并不重要。

简而言之:当一个浏览器客户端连接到这个服务器时,浏览器发送encryption的包,这个包被服务器的公钥encryption。 服务器解密软件包,如果服务器可以解密,那么服务器就被encryption了。

服务器在解密之前并不知道客户端的任何内容,因为只有IP地址没有通过连接encryption。 这就是为什么你需要2个IP的2个证书。 (忘了SNI,现在还有太多的XP了。)

在客户端浏览器获得CN,然后是SAN,直到所有的检查。 如果其中一个名称与该网站相匹配,则URLvalidation由浏览器完成。 (即时通讯不是在说证书validation,当然很多ocsp,crl,aia请求和答案每次都会在网上传播。)

CAB论坛基线要求

我看到没有人提到基线要求中的部分。 我觉得他们很重要。

问: SSL – 通用名称(CN)和主题备用名称(SAN)如何协同工作?
答:一点也不。 如果有SAN,那么CN可以被忽略。 – 至less如果检查的软件严格遵守CABForum的基线要求。

(所以这意味着我不能回答“编辑”你的问题,只有原来的问题。)

CAB论坛基线要求,第1.2.5版(截至2015年4月2日),第9-10页 :

9.2.2主题专有名称字段
一个。 主题通用名称字段
证书字段: subject:commonName(OID 2.5.4.3)
必需/可选:弃用(劝阻,但不禁止)
内容:如果存在,这个字段必须包含一个IP地址或完全合格的域名,它是证书的subjectAltName扩展名(见第9.2.1节)中包含的值之一。

编辑:从@布鲁诺的评论链接

RFC 2818: HTTP over TLS ,2000, 第3.1节:服务器标识 :

如果存在dNSNametypes的subjectAltName扩展名,则必须将其用作标识。 否则,必须使用证书的主题字段中的(最具体的)通用名称字段。 虽然通用名称的使用是现有的惯例,但已被弃用,并鼓励证书颁发机构使用dNSName。

RFC 6125: 在传输层安全性(TLS)的上下文中使用X.509(PKIX)证书在互联网公钥基础设施内表示和validation基于域的应用服务标识 ,2011年, 第6.4.4节:检查通用名称 :

当且仅当所呈现的标识符不包括客户端支持的DNS-ID,SRV-ID,URI-ID或任何特定于应用的标识符types时,则客户端可以作为最后的手段检查一个string,其forms与主题字段(即CN-ID)的公共名称字段中的标准DNS域名相匹配。