我想在 Let's Encrypt 签名的 SSL 证书中包含两个通配符:*.*.thost3.de
。此证书是否与符合该规则的任何主机名匹配(例如example.example.thost3.de
,hello.world.thost3.de
),并且 Let's Encrypt 是否可以接受他们签名的证书中存在的此类通配符?
答案1
不,这不应该(在 RFC 中“不应该”的含义)起作用,因为记录在 RFC 6125 中(在传输层安全性(TLS)环境中使用 X.509(PKIX)证书在互联网公钥基础设施中表示和验证基于域的应用服务身份):
如果客户端将参考标识符与
DNS 域名部分包含通配符
“*”的现有标识符进行匹配,则适用以下规则:
客户端不应该尝试匹配所呈现的标识符,其中通配符包含除最左边的标签之外的标签(例如,不匹配bar.*.example.net)。
如果通配符是所呈现标识符中最左边标签的唯一字符,则客户端不应该与除引用标识符最左边标签之外的任何内容进行比较(例如,*.example.com 将匹配 foo.example.com,但不匹配 bar.foo.example.com 或 example.com)。
[...]
将这两者放在一起:
- 除了证书最左边的部分(以点分隔)以外,其他地方不能有通配符:内部通配符无效。
- 您不能让通配符证书与其左侧的附加标签部分(即:以点分隔)匹配:这再次意味着,如果使用了有效的单个通配符,则没有任何具有附加左侧部分的内容可以匹配(因此 hello.world.thost3.de 无法匹配证书 *.thost3.de)。
您可以做的是颁发一个包含许多 SAN 部分的证书,这些证书本身可能带有 (有效) 通配符。但我完全不确定您是否能让 Let's Encrypt 接受它。
编辑:*.stackexchange.com
由 Let's Encrypt 使用具有通配符的多个 SAN 进行签名。
例子:
$ openssl s_client -connect stackexchange.com:443 </dev/null 2>/dev/null| openssl x509 -noout -text | grep -A1 'X509v3 Subject Alternative Name' | tr ',' '\n'
X509v3 Subject Alternative Name:
DNS:*.askubuntu.com
DNS:*.blogoverflow.com
DNS:*.mathoverflow.net
DNS:*.meta.stackexchange.com
DNS:*.meta.stackoverflow.com
DNS:*.serverfault.com
DNS:*.sstatic.net
DNS:*.stackexchange.com
DNS:*.stackoverflow.com
DNS:*.stackoverflow.email
DNS:*.superuser.com
DNS:askubuntu.com
[...]