我们有一个可以通过互联网访问的开发服务器,但 IP 受到限制,因此这里的安全性只是一种允许我们重现实时环境的方式,而不是试图确保安全。顶级域名(我们称之为)dev.com
未被使用,但开发人员将每个站点设置在他们自己的特定子域中。因此,假设有和site1.com
,那么开发人员和将具有完整的 URL,如下所示:site2.com
site3.com
george
nico
- 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
可以工作,但是却不行, Chrome 中DNS.3
出现错误。NET::ERR_CERT_COMMON_NAME_INVALID
有没有办法做到这一点,或者我必须生成一个很长的条目列表DNS.x
才能覆盖所有站点?
我听说通过创建自己的 CA 可以实现这一点。我按照这个答案DNS.1
在我自己的 CA 完好无损的情况下,我创建了一个与通用名称相同且DNS.2
带有通配符的证书,DNS.3
如下所示:
DNS.1 = dev.com
DNS.2 = *.dev.com
DNS.3 = *.*.*.*.nico.dev.com
然后,我将cacert.pem
上面链接的指南的第一步导入到 Chrome 作为受信任的根证书颁发机构,然后重新启动浏览器。对于每个域配置,我分别将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*) 域是否可行?
答案1
只能有一个级别的通配符。
*.example.com 将涵盖 any.example.com,但不包括 one.anything.example.com。
*.subdomain.example.com 将处理任何事情.subdomain.example.com。
答案2
公共签名证书:
技术解答
是的。没有什么可以阻止创建具有任意通配符级别和域组合的通配符子域 SAN 证书。如果您管理自己的内部 CA,则可以创建具有任意子域、通配符等组合的 SAN 证书。
实用答案 根据我自己的经验
不。或者不太可能…… 我不知道有哪个 CA 会卖给你这些证书。我曾向几家 CA 询问过这个解决方案,但每家都立即拒绝了请求。我怀疑他们担心提供此类证书会亏本。他们更希望你为每个区域(子域或非子域)准备一个通配符,或者一个最多包含 SAN 证书n条目数。 n是特定 CA 会限制您的数量。我找不到会出售带有通配符子域条目的 SAN 证书的 CA。我会提供我查询的 CA 列表,但我怀疑这可能不合适。
[更新]
自签名证书
我误解了这个问题的意思。我认为需要一个例子 openssl.cnf。 以下是一个例子 您需要用通配符子域名替换 DNS 条目。security.stackexchange.com以及此设置。我没有测试过这一点,因为我的需求是围绕可公开访问的 URL,而 CA 不允许将此作为选项。