我们有一个可以通过互联网访问的开发服务器,但是IP是受限的,所以这里的安全性只是让我们重现现场环境而不是试图安全的一种方式。 我们称之为dev.com
的顶级域名未被使用,但是开发者已经将每个站点设置在他们自己特定的子域中。 假设有site1.com
, site2.com
和site3.com
,那么开发者george
和nico
将拥有完整的url,例如:
我原本以为通配符自签名证书会做,但后来发现*.dev.com
只适用于something.dev.com
而不是sub-sub域。 我决定按照这个答案的指示。 当我使用:
DNS.1 = www.site2.com.nico.dev.com DNS.2 = www.site1.com.george.dev.com
一切正常,但不幸的是有很多网站的开发人员,所以这里会有超过100个DNS.x
条目。 我想知道是否可以在openssl.cnf
的[ alternate_names ]
部分使用通配符。 我尝试了以下内容:
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
条目列表覆盖所有的网站?
我听说通过创build自己的CA,这将是可能的。 我遵循这个答案的伟大指示。 在我自己的CA完好的情况下,我创build了一个与DNS.1
相同的证书,其通用名和DNS.2
和DNS.3
的通配符如下所示:
DNS.1 = dev.com DNS.2 = *.dev.com DNS.3 = *.*.*.*.nico.dev.com
然后,我将cacert.pem
从上面链接到的指南的第一步导入到Chrome作为受信任的根证书颁发机构,然后重新启动浏览器。 对于每个域configuration,我分别将SSLCertificateKeyFile
和SSLCertificateFile
设置为serverkey.pem
和SSLCertificateFile
,并testing了几个域:
NET::ERR_CERT_COMMON_NAME_INVALID
,我看到错误NET::ERR_CERT_COMMON_NAME_INVALID
NET::ERR_CERT_AUTHORITY_INVALID
所以看起来通配符的第一级工作正常,但在下面,它没有。 Chrome和IE(使用Windows证书)和Firefox(pipe理自己的)都是一样的。
所以我的问题仍然是这样使用sub-sub(-sub *)域吗?
你只能有一个通配符级别。
* .example.com将覆盖anything.example.com,而不是one.anything.example.com。
* .subdomain.example.com将处理任何.subdomain.example.com。
公开签名:
技术答案
是。 没有任何东西可以阻止通配符子域SAN证书与通配符级别和域的混合的创build。 如果您pipe理自己的内部CA,则可以使用任何子域,通配符等组合来创buildSAN证书。
基于我自己的经验的 实用答案
不, 或者不太可能……我不知道有任何CA会向你推销其中的一种。 我已经问过几个CA来解决这个问题,而且每一个都立即拒绝了这个请求。 我怀疑他们担心提供这样的证书会赔钱。 他们更喜欢每个区域有一个通配符(子域或不是),或者一个SAN证书最多有n个条目。 n是特定CA将限制您的数量。 我无法find一个CA,它会销售一个混合了通配符子域条目的SAN证书。 我会提供我所查询的CA的列表,但是我怀疑在这里可能不合适。
[更新]
自签名的证书
我错误地理解了这个问题的意图。 我相信openssl.cnf是一个例子。 这里有一个例子,你需要用你的通配符子域名replaceDNS条目。 在security.stackexchange.com上也有一些post,以及这个设置。 我没有testing过这个,因为我的需求是围绕可公开访问的URL,CA不会允许这个选项。