是否有可能限制使用根证书到域

我的客户使用自签名证书来使应用程序正常工作。 为了能够工作,我必须安装他们用来签署证书的根证书。

是否可以configuration一个根证书,所以它只能validation一个域?

根据经验:

,在相信客户的CA证书时暗示的是对该CA签署的每个证书的信任。

我不知道有任何应用程序/库有一个简单的选项,允许您作为最终用户select,您将信任您的客户或任何其他CA证书只为某些(子)域,即只为*。 example.com和* .example.org,没有别的。

对于目前值得信赖的政府赞助的CA来说,Mozilla也有一个类似的担忧,那就是开放注意力点 ,例如Chrome为访问Google网站而设置了额外的检查function,这就是stream氓* .google.com证书和Diginotar CA的妥协scheme如何公之于众。

但即使您不信任CA,也仍然可以导入/信任由该CA签名的特定服务器证书,这将防止该证书中的主机名出现SSL警告。 这应该使您的应用程序没有错误或投诉。

例外:

X.509v3 PKI标准的一个使用不足的选项是Name Constraints扩展名,它允许CA证书包含它被授权为其颁发证书的域名模式的白名单和黑名单。

您可能很幸运,而您的客户在build立PKI基础架构并在其CA证书中包含Name约束时,已经限制了自己。 然后您可以直接导入他们的CA证书,并知道它只能validation有限的域名范围。

@CryptoGuy在这里有一个非常好的答案,但我想扩大它。

解释:

您可以限制第三方CA信任颁发给您希望的名单的证书(来自该CA)。 即使第三方CA没有名称约束扩展,也可以通过使用您自己的内部CA服务器通过交叉authentication来应用它们。 诀窍是你使用你的内部CA来签署第三方CA.

叶SSL证书 – >交叉证书 – >您的CA证书 – >您的内部根证书。

以下是您如何完成这项工作(使用OpenSSL命令行CA)

创build一个简单的CA

 openssl req -new -x509 -days 3650 -newkey rsa:2048 -sha256 -out root-ca.crt -keyout root-ca.key -subj "/CN=My Root CA" 

您可以跳过创build中间CA.

使用名称约束创build一个中间CA请求。

 openssl req -new -days 3650 -newkey rsa:2048 -out domain-ca.req -sha256 -keyout domain-ca.key -config ossl_domain_com.cfg 

有了这个在ossl_domain_com.cfg文件中:

 [ req ] prompt=no distinguished_name=req_distinguished_name req_extensions=domain_ca [ req_distinguished_name ] CN=somedomain.com trust CA [ domain_ca ] basicConstraints=critical,CA:true,pathlen:1 nameConstraints=critical,permitted;DNS:.somedomain.com 

然后,用您的CA签署中间域CA.

 openssl x509 -req -in domain-ca.req -CA root-ca.crt -CAkey root-ca.key -sha256 -set_serial 1 -out domain-ca.crt -extensions domain_ca -extfile ossl_domain_com.cfg 

如果您跳过创build中间体,请使用根CA签名

现在使用他们的证书在您的权限下重新签署原始域名的CA. 您可以在这里添加CA扩展。

 openssl x509 -in third_party_ca.crt -CA domain-ca.crt -CAkey domain-ca.key -set_serial 47 -sha256 -extensions domain_ca -extfile ossl_domain_com.cfg -out domain-cross-ca.crt 

您可能需要使用-x509-to-req参数来创build一个请求,这个请求的签名方式与上面的中间语句完全相同。

现在,将您的根CA,中间CA和domain-cross-ca添加到浏览器的信任数据库中。