使用由CA签名的另一个证书对签名证书进行签名

15

使用由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为子域创建新证书。这个过程应该如何设计来实现呢?


这个问题似乎不适合,因为它涉及PKI而不是编程。 - Eugene Mayevski 'Callback
2个回答

22
无论证书是否能用于签署另一个证书,都由证书的基本限制字段来定义。当您向CA提交CSR时,CA返回的证书应该在基本约束字段中指定该证书不能用于签署其他证书。
否则,这将为任何人创建任何站点的伪造证书打开大门。例如,我可以为mysite.com创建CSR,获得由VeriSign等CA签署的证书,然后为www.paypal.com创建CSR并使用mysite.com的证书对www.paypal.com的证书进行签名。然后,我就会拥有www.paypal.com的有效证书。但是,我不是paypal.com。
尽管如此,早期浏览器和甚至一些早期版本的OpenSSL中的许多早期SSL实现没有检查证书链中证书的基本限制字段,因此这是一个可以被利用的漏洞。安全研究人员Moxie Marlenspike积极将此问题引起公众的关注,迫使浏览器制造商修复了该问题。更多信息请参见http://www.thoughtcrime.org/ie-ssl-chain.txt

你将无法签署paypal.com的证书,因为只能使用我们自己的私钥进行签署。如果想让它也被VeriSign签署,你还需要CA的私钥,而你没有,只有由CA签署的证书。 - benez
如果@TypeIA的mysite.com证书由VeriSign签名,并且允许他通过基本限制签署其他证书,那么这是否意味着他可以使用他的mysite.com证书和私钥签署paypal.com,并且所有信任VeriSign的人也将信任由mysite.com签署的paypal.com?这至少可以解释为什么这个信任链总是如此简短... - benez
2
@benez 是的,如果 VeriSign 用 basicConstraints = CA:TRUE 签署了他的 mysite.com 证书,那么他就可以使用他的 mysite.com 证书签署任何东西,结果签署的证书将具有有效的信任链,可以追溯到 VeriSign。mysite.com 证书随后充当 中间证书。中间 CA 证书经常被使用,但出于明显的原因,没有人会向消费者发放这样的证书。 - TypeIA

5

为什么不可能这样做?

mti2935有个好答案。总的来说,在大多数情况下,它会破坏信任模型。


我试着在服务中使用这个新证书,但浏览器报告说该证书缺少CA链。

将签名证书安装在“受信任的证书”存储区中。


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

每个子域名将有一个独特的证书,还是一个带有所有子域名列表的证书?

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

要实现后者,通常需要使用允许您根据需要生成终端实体证书的下级根或中间项。如果您正在运行自己的私有PKI,那么您可以这样做。在私有PKI情况下,您要求用户将您的信任锚定(或“CA根”)安装在他们的“受信任的证书”存储区中。

如果您想避免浏览器警告等问题,并且不需要用户安装您的受信任根,则需要联系像Trustwave这样的人。他们过去出售过这些类型的证书。更正确地说,他们将私钥放在硬件中,以便将设备以更高的价格出售,并且私钥无法被复制。例如,请参见Trustwave admits issuing man-in-the-middle digital certificate


这个过程的设计如何?

这取决于用例。PKI是PKI,任何入门书籍都会阐述概念。但私有PKI具有不同于浏览器的模型,因为它们是不同的用例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接