我的客户使用自签名证书来使应用程序正常工作。为了能够正常工作,我必须安装用于签名证书的根证书。
是否可以配置根证书,使其仅对一个域进行验证?
我的客户使用自签名证书来使应用程序正常工作。为了能够正常工作,我必须安装用于签名证书的根证书。
是否可以配置根证书,使其仅对一个域进行验证?
Answers:
不,暗示信任客户的CA证书是对该CA签名的每个证书的信任。
我不知道有哪个应用程序/库具有简单的选项,允许您作为最终用户选择仅信任某些(子)域(即仅*)的客户或任何其他CA证书。 example.com和* .example.org,仅此而已。
Mozilla对当前受信任的政府赞助的CA作为开放关注点也存在类似的担忧,例如,Chrome内置了用于访问Google网站的额外支票,这就是流氓* .google.com证书和Diginotar CA的危害所在如何公开的原因。 。
但是,即使您不信任CA,也仍然可以导入/信任由该CA签名的特定服务器证书,这将防止对该证书中的主机名进行SSL警告。那应该使您的应用程序正常工作而不会出现错误或投诉。
X.509v3 PKI标准的一个非常未被充分利用的选项是“ 名称约束”扩展,该扩展允许CA证书包含被授权为其颁发证书的域名模式的白名单和黑名单。
您可能很幸运,您的客户在设置PKI基础结构并将其Name约束包括在其CA证书中时已经克制了自己。然后,您可以直接导入其CA证书,并且知道它只能验证有限范围的域名。
example.com
或*.ad.example.com
有效的证书。您的内部CA也可以颁发证书,以 *.example.bank
允许进行中间人攻击并监听您的网上银行凭据。
@CryptoGuy在这里有一个很好的答案,但我想对此进行扩展。
释义:
您可以限制第三方CA信任颁发给所需名称列表的证书(来自该CA)。即使第三方CA没有名称限制扩展名,也可以通过交叉认证使用您自己的内部CA服务器来应用它们。诀窍是您使用内部CA签署第三方CA。
叶子SSL证书->交叉证书->您的CA证书->内部根证书。
这就是您的工作方式(使用OpenSSL命令行CA)
创建一个简单的CA
openssl req -new -x509 -days 3650 -newkey rsa:2048 -sha256 -out root-ca.crt -keyout root-ca.key -subj "/CN=My Root CA"
您可以跳过创建中间CA
创建一个具有名称约束的中间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
如果您跳过创建中间体,请使用您的根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
参数创建请求,该请求的签名方式与上面的中介完全相同。
现在,将您的根CA,中间CA和跨域CA添加到浏览器的信任数据库中。
basicConstraints
配置文件中的该行似乎导致约束扩展名两次包含在证书中,这导致Firefox拒绝带有错误消息的证书。我认为可以安全地将其删除。
error with certificate to be certified - should be self signed
。这是什么意思,如何解决?pastebin.ubuntu.com/p/QHhpQh2N6J