通配符 ssl 证书可以支持多少个主机名?有没有限制?

信息安全 tls 通配符
2021-08-10 15:37:38

通配符 ssl 证书可以支持多少个主机名?有没有限制?

3个回答

这里有两件不同的事情。一是关于可以放入证书的主机名数量。另一个是“通配符名称”的概念。

Subject Alt Names扩展中,您可以输入类型的“替代名称” dNSName它们中的每一个都是“可接受的服务器名称”(即客户端将接受据称使用该名称的服务器的证书)。扩展的 ASN.1 表示法如下:

   SubjectAltName ::= GeneralNames

   GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName

   GeneralName ::= CHOICE {
        otherName                       [0]     OtherName,
        rfc822Name                      [1]     IA5String,
        dNSName                         [2]     IA5String,
        x400Address                     [3]     ORAddress,
        directoryName                   [4]     Name,
        ediPartyName                    [5]     EDIPartyName,
        uniformResourceIdentifier       [6]     IA5String,
        iPAddress                       [7]     OCTET STRING,
        registeredID                    [8]     OBJECT IDENTIFIER }

看到“MAX”了吗?这意味着“没有限制”。您可以在证书中添加任意数量的名称。

那么,既然我们都在谈论DER编码证书的总长度不得超过702223880805592151456759840151962786569522257399338504974336254522393264865238137237142489540654437582500444843247630303354647534431314931612685275935445798350655833690880801860555545317367555154113605281582053784524026102900245630757473088050106395169337932361665227499793929447186391815763110662594625664个字节,每个名字将采取几十个字节左右(至少)。但是现有的库和协议可能会实施更严格的限制。例如,如果要在 SSL/TLS 中使用证书(例如,用于执行 HTTPS 的 Web 服务器的证书),则证书必须在 16 兆字节内(其长度编码在三字节字段中,根据SSL/TLS 协议)。因此,证书中最多可以有大约一百万个备用名称

然后,每个名称都可以是通配符名称,意味着它包含“*”字符。“*”将匹配除点之外的任何字符序列。现有的浏览器再次强制执行其他约束,特别是:

  • 名称中只能有一个“*”字符(所以没有“ *.*.stackexchange.com”,以实际情况为例)。
  • “*”必须作为第一个字符出现,而不是在其他地方出现(所以没有“ meta.*.stackexchange.com”,以继续现实生活中的情况)。
  • “*”必须代表完整的名称组件(因此“ *.example.com”而不是“ *foo.example.com”)。

甲名组件被限制为63个字符,并且字符必须是唯一的字母(不区分大小写),数字和减号(“ - ”),所以有大约37 64 -2 = 23169162752708970943114627382699355445603465075569066753527132965271355336698663689946873706000418559个可能的名字匹配通配符名称( “-2”是因为空字符串不是有效的名称组件)(还有其他限制,例如不以减号开头,但客户端倾向于不强制执行这些)。

由于您可以在证书中拥有一百万个备用名称,将该数字乘以一百万,您将拥有与您的“通配符证书”匹配的最大主机名数量。对于大多数用途来说应该足够了。


注意一个常见的混淆。我们说“通配符证书”,但这是用词不当。意思是“证明至少其中一个包含的名称是通配符名称”。

对于现实生活中的示例,请查看 Google 的证书(连接到https://www.google.com/,然后让您的浏览器显示证书)。目前,返回的证书包含不少于49 个备用名称,如下所示:

*.google.com
*.android.com
*.appengine.google.com
*.cloud.google.com
*.google-analytics.com
*.google.ca
*.google.cl
*.google.co.in
*.google.co.jp
*.google.co.uk
*.google.com.ar
*.google.com.au
*.google.com.br
*.google.com.co
*.google.com.mx
*.google.com.tr
*.google.com.vn
*.google.de
*.google.es
*.google.fr
*.google.hu
*.google.it
*.google.nl
*.google.pl
*.google.pt
*.googleadapis.com
*.googleapis.cn
*.googlecommerce.com
*.googlevideo.com
*.gstatic.cn
*.gstatic.com
*.gvt1.com
*.gvt2.com
*.urchin.com
*.url.google.com
*.youtube-nocookie.com
*.youtube.com
*.youtubeeducation.com
*.ytimg.com
android.com
g.co
goo.gl
google-analytics.com
google.com
googlecommerce.com
urchin.com
youtu.be
youtube.com
youtubeeducation.com

请注意,其中 39 个名称是“通配符”。使用上面的数字,这意味着此证书可能匹配不少于 903597347355649866781470467925274862378535137947193603387558185645582858131247883907928074534016323811 个不同的主机名。这就是谷歌——人们可以期待他们的证书“在任何地方都有效”。

通配符证书匹配一个模式,而不是一个主机名或一组主机名。这是问题*.example.com,这意味着任何格式的主机都[subdomain].example.com将匹配。也许值得注意的是,它仅限于一个级别,因此*.example.com通配符证书可以用于sub1.example.comand sub2.example.com,但不能用于deeper.sub1.example.com

因此,由于匹配基于模式而不是主机名,因此没有限制,也没有办法一般地强制执行限制,因为您可以在许多地方使用证书,而这些地方都不需要知道其他地方,或它用于的所有特定主机名。

根据证书颁发机构指南,通配符 SSL 证书仅支持具有相同主机名的单级子域的安全性。

没有任何限制通配符 SSL 可以保护无限的单级子域。