我有一台服务器,可以响应诸如a.b.c.example.com
.a
b
和之类的域c
,它们是动态部分,我想用一个 SSL 证书覆盖它们所有。
我创建了通配符证书这里但*.example.com
现在我有一个错误ERR_CERT_COMMON_NAME_INVALID
。
同时c.example.com
效果也很好。
我可以以某种方式为多个嵌套子域颁发证书吗?
答案1
正如 @Zoredache 指出的那样,通配符只能达到创建时所对应的深度。如果您有 的通配符*.example.com
,则只有该域内的域才[*].example.com
有效。如果您需要两层,则必须创建一个包含这些域的多层证书,例如*.a.example.com
。我不能说我听说过多层通配符证书,因此您可能需要为每个子域创建多个通配符。
您可以创建一个证书,通过使用主题备用名称 (SAN) 来实现此目的。只需看一下 stackoverlow.com 证书及其疯狂的部署 ;)
答案2
不可以,你不能这么做。根据RFC 2828,SSL 证书通配符可用于匹配单个域名组件,而不能匹配多个组件。此内容已在RFC 6125,其中第 5.2 节规定:
o The ’*’ (ASCII 42) wildcard character is allowed in the dNSName of
the subjectAltName extension (and in common name, if used to store
the host name), but only as the left-most (least significant) DNS
label in that value. This wildcard matches any left-most DNS
label in the server name. That is, the subject *.example.com
matches the server names a.example.com and b.example.com, but does
not match example.com or a.b.example.com. Implementations MUST
support wildcards in certificates as specified above, but MAY
provide a configuration option to disable them.
换句话说,不允许使用多个通配符,并且任何通配符都必须位于 DNS 名称的最左侧部分。第 6.4.3 节重复了这一点,指定了客户端在遇到带有通配符的证书时应如何操作 - 除域名最左侧部分之外的任何通配符都应导致证书与您使用它的域名不匹配。具体来说,6.4.3 中的第一点是:
1. The client SHOULD NOT attempt to match a presented identifier in
which the wildcard character comprises a label other than the
left-most label (e.g., do not match bar.*.example.net).
因此,即使您可以让 Letsencrypt 制作这些证书,您的网站访问者仍然不会接受它们。