公钥在证书签名请求(CSR)中的用途

3
在我们的服务器上创建CSR时,将生成公钥和私钥对。我们将持有私钥将CSR和公钥发送给CA。在使用CA的根证书的私钥签署之前,CA将验证我们的公钥。我们拥有自己的CA团队来认证CSR请求。我的问题如下:
  1. CSR本身是否包含公钥,还是我们需要单独向CA提供公钥?
  2. 在将CSR发送到CA之前,CSR是否由我们的公钥签名(或)CSR是否同时持有公钥?
  3. CA是否仅在CSR上签名(或)在CSR +公钥组合集上签名?
  4. 既然我们使用自己的CA而不是全局CA,那么我们是否应该在客户端和服务器端的信任存储中都安装CA的根证书和中间证书?
  5. 当我们向客户端呈现服务器证书时,该证书是否包含服务器的公钥?
  6. 我们是否应该将服务器的公钥安装在客户端的信任存储中以进行加密?
提前感谢您的帮助。

1
Steffan超出了预期。如果可以的话,我会代表你接受他的答案。唯一需要改变的是他的答案基于大多数Web服务器验证证书的方式,而不是MQ。根据您使用的MQ版本以及较新版本的验证策略设置,实际上可能需要将中间签名者加载到密钥库中。曾经有一段时间,如果没有完整的签名者链,是无法收到已签名CSR的。 - undefined
1个回答

5

CSR本身是否包含公钥,或者我们需要单独向CA提供公钥?

公钥在CSR内部。

在将CSR发送到CA之前,我们的公钥是否会对其进行签名(或)CSR是否同时拥有公钥?

CSR由您的密钥签名。仅有公钥是不够的,需要私钥进行签名。

CA是否只对CSR签名(或)对CSR和公钥的组合进行签名?

CA将从CSR中提取信息,包括公钥并对其进行签名。它不会对CSR本身进行签名。

由于我们使用自己的CA而不是全局CA,因此我们应该在客户端和服务器端的信任存储中安装CA的根证书和中间证书吗?

仅需要将根证书作为信任锚点存储在客户端中。服务器证书内的中间证书应与服务器证书一起在SSL握手期间由服务器发送。

当我们向客户端呈现服务器证书时,该证书是否包含服务器的公钥?

是的,证书是公钥以及其他信息,如主题(主机名)。

我们是否应该在客户端的信任存储中安装服务器的公钥以进行加密?

不需要。客户端将在SSL握手期间获取证书。只有在使用证书固定时,您才需要在握手之前了解服务器的证书或公钥。


谢谢Steffen,在阅读您的回复后,我有以下疑问。我们使用公钥对CSR进行签名,而CA则使用根私钥进行签名。您说在握手过程中将交换公钥。 - undefined
1
@AnilReddy:签名总是使用私钥完成的。公钥是证书的一部分,将在SSL握手过程中发送给客户端。 - undefined
如果我们在SSL握手中交换公钥,那么在将数据发送到远程之前,我们如何加密数据呢? 如果我们使用非对称加密,我们可以用我们的公钥来加密它,但是远程无法解密,因为我们持有私钥。而对称加密的情况下,我们正在交换密钥,所以第三方可以轻松解密。 - undefined
1
@AnilReddy:你的问题超出了这个论坛的范围,更适合在security.stackexchange.com上提问。实际上,我建议你在这个论坛上学习关于SSL/TLS是如何工作的的答案。 - undefined

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