使用CA签署的另一个证书签署证书

时间:2014-01-23 21:36:33

标签: openssl x509 pki

是否可以使用CA签名的证书作为其他证书的CA签署新证书,并且仍然可以通过根CA进行验证?

示例:

# create new key
openssl genrsa -des3 -out server.key 2048
openssl req -new -key server.key -out server.csr
....
# send csr to ca for signing
....
# now what if we make a new key and sign it with the received crt?
openssl genrsa -des3 -out newkey.key 2048
openssl req -new -key newkey.key -out newkey.csr
openssl x509 -req -in newkey.csr -CA server.crt -CAkey server.key -CAcreateserial -out newcert.crt -days 500

为什么不能这样做?我尝试将这个新证书用于服务,浏览器抱怨证书缺少CA链。基本上我想使用一个为域签名的证书,并使用域证书作为子域的CA为子域创建新证书。这个过程如何设计起作用?

2 个答案:

答案 0 :(得分:16)

证书的基本约束字段是否可以使用证书来签署另一个证书。当您向CA提交CSR时,CA返回的证书应指定该证书不能用于在基本约束字段中签署其他证书。

否则,这将为任何能够为任何网站创建虚假证书的人敞开大门。例如,我可以为mysite.com创建CSR,获取由VeriSign等CA签署的证书,然后为www.paypal.com创建CSR,并使用mysite.com证书为www.paypal签署证书。 COM。然后,我将获得www.paypal.com的有效证书。但是,我不是paypal.com。

尽管如此,早期浏览器中的许多早期SSL实现甚至是早期版本的OpenSSL都没有检查证书链中证书的基本约束字段,因此这是一个可以被利用的漏洞。安全研究员Moxie Marlenspike积极引起公众的注意,迫使浏览器制造商解决这个问题。有关详细信息,请参阅http://www.thoughtcrime.org/ie-ssl-chain.txt

答案 1 :(得分:4)

  

为什么不能这样做?

mti2935有一个很好的答案。总而言之,它在大多数情况下打破了信任模型。


  

我尝试将此新证书用于服务,并且浏览器抱怨证书缺少CA链。

在“受信任证书”商店中安装签名证书。


  

基本上我想使用一个为域签名的证书,并使用域证书作为子域的CA为子域创建新证书。

是否每个子域都有唯一的证书,或者主题备用名称中是否有一个包含所有子域列表的证书?

前者是可行的 - 您只需为每个子域购买新证书。后者有点困难,但并非不可能。

要执行后者,您通常使用从属根或中间,允许您根据需要创建终端实体证书。如果您正在运行自己的私有PKI,那么您可以这样做。在私有PKI案例中,您告诉您的用户在其“可信证书”商店中安装您的信任锚(或“CA root”)。

如果您想避免浏览器警告等要求用户安装您信任的root,那么您需要与Trustwave之类的人联系。他们过去曾出售过这些类型的证书。更准确地说,他们将私钥放在硬件中,因此可以以更高的价格出售设备,并且无法复制私钥。例如,请参阅Trustwave admits issuing man-in-the-middle digital certificate


  

这个过程如何设计起作用?

这取决于用例。 PKI是PKI,任何介绍性的书都将概述这些概念。但私有PKI的模型与浏览器不同,因为它们是不同的用例。