我们有一个可通过 Internet 访问的开发服务器,但受 IP 限制,因此这里的安全性只是允许我们重现实时环境的一种方式,而不是试图确保安全。没有使用顶级域,我们称之为dev.com
,但开发人员将每个站点都设置在自己的特定子域中。因此,假设有site1.com
,site2.com
和site3.com
, 然后开发人员george
将nico
拥有完整的 URL,例如:
- www.site1.com.george.dev.com
- www.site2.com.george.dev.com
- www.site1.com.nico.dev.com
- ETC
本来以为通配符自签名证书就可以了,后来发现*.dev.com
只适用于something.dev.com
子域而不是子域。我决定按照这个答案中的说明进行操作。当我使用:
DNS.1 = www.site2.com.nico.dev.com
DNS.2 = www.site1.com.george.dev.com
一切正常,但不幸的是,许多网站都有很多开发人员,所以这里有超过 100 个条目DNS.x
。我想知道是否可以在[ alternate_names ]
我的openssl.cnf
. 我尝试了以下方法:
DNS.1 = dev.com
DNS.2 = www.site1.com.george.dev.com
DNS.3 = *.*.*.nico.dev.com
虽然DNS.2
有效,DNS.3
但没有,给我NET::ERR_CERT_COMMON_NAME_INVALID
Chrome 中的错误。
有没有办法做到这一点,还是我必须生成一个很长的DNS.x
条目列表来涵盖所有站点?
我听说通过创建我自己的 CA,这是可能的。我遵循了有关此答案的重要说明。在我自己的 CA 完好无损的情况下,我创建了一个与DNS.1
通用名称相同的证书,DNS.2
并DNS.3
使用如下通配符:
DNS.1 = dev.com
DNS.2 = *.dev.com
DNS.3 = *.*.*.*.nico.dev.com
然后我cacert.pem
从上面链接的指南的第一步导入到 chrome 作为受信任的根证书颁发机构并重新启动浏览器。对于每个域配置,我分别将 and 设置为and并SSLCertificateKeyFile
测试了几个域:SSLCertificateFile
serverkey.pem
servercert.pem
- 当转到主域https://dev.com时,我看到了绿色挂锁!
- 当转到子域https://www.dev.com时,我还看到了绿色挂锁!
- 转到 URL https://www.test.com.nico.dev.com时,我看到了错误
NET::ERR_CERT_COMMON_NAME_INVALID
- 当我转到https://www.xxxxxxxxxx.com.nico.dev.com的任何变体时,我看到了错误
NET::ERR_CERT_AUTHORITY_INVALID
所以看起来第一级通配符工作正常,但在此之下,它没有。这对于 Chrome 和 IE(使用 Windows 证书)和 Firefox(管理自己的证书)是相同的。
所以我的问题仍然存在,是否可以以这种方式使用 sub-sub(-sub*) 域?
公开签名证书:
技术解答
是的。没有什么可以阻止创建具有任何通配符级别和域组合的通配符子域 SAN 证书。如果您管理自己的内部 CA,则可以使用子域、通配符等的任意组合创建 SAN 证书。
基于我自己的经验的实用答案
没有或不太可能...... 我不知道有任何 CA 会向您出售其中之一。我已经向几个 CA 询问了这个解决方案,每个 CA 都立即拒绝了这个请求。我怀疑他们担心提供此类证书会赔钱。他们更喜欢您为每个区域(子域或非子域)使用一个通配符,或者一个最多包含n个条目的 SAN 证书。 n是特定 CA 将限制您的数字。我找不到可以出售混合了通配符子域条目的 SAN 证书的 CA。我会提供我查询的 CA 的列表,但我怀疑这可能不适合这里。
[更新]
自签名证书
我误解了这个问题的意图。我相信需要一个示例 openssl.cnf。 这是一个示例 ,您需要将 DNS 条目替换为通配符子域名。security.stackexchange.com上也有一些关于此设置的帖子。我没有对此进行测试,因为我的需求是围绕可公开访问的 URL,而 CA 不允许将其作为选项。
您只能拥有一级通配符。
*.example.com 将覆盖anything.example.com,但不包括one.anything.example.com。
*.subdomain.example.com 将处理任何东西.subdomain.example.com。