证书签名请求:是否包含 public 密钥或私钥?
certificate signing request: Does it contain public key or private key?
我试图揭开 CSR 的生成方式以及 public 和私钥的作用。
服务器 1:
- 生成public和私钥
现在,我想要 CSR,为此,我将去 CA 进行签名。
对于创建 CSR 请求,它是基于服务器的 public 密钥还是私钥?
我提到了这个SO question;在那里,它说服务器(正在请求 CSR)在将 CSR 发送到 CA 之前,它自己通过其私钥签署 CSR。
有点迷茫,有以下问题:
最终产品(CA签署的证书):它包含服务器的私钥还是public密钥?我了解最终产品应包含请求 CSR 的服务器的 public 密钥。
发起CSR请求时,为什么服务器需要用自己的私钥对CSR进行签名?正确吗?
服务器的public是CSR的关键部分吗?
最后,CA是否从CSR生成证书以及它如何从CSR导出服务器的public密钥?
The end product (the signed certificate by CA): Does it contain server's private key or public key?
证书是 public 文件。因此它只能包含 public 键。如果它包含私钥,那么该密钥将不再是私钥。
While initiating a CSR request, why a server needs to sign a CSR by its private key? Is it correct?
是的,大体上是正确的。这个概念称为所有权证明 (PoPo),它用于向 CA 证明您(或本例中的服务器)拥有与 public 密钥相对应的私钥,该密钥将由 CA(或至少在 CA 签署您的证书之前拥有它)。如果 CA 不坚持 PoPo,那么您可以拒绝任何已签名的未来消息,如下所示:
- 您的 public 密钥已由 CA 签名以创建您的证书。当时,您可以使用您的私钥对您的请求进行签名。一切都很好。
- 我过来从您的证书中复制您的 public 密钥。我现在将其作为 CSR 提交给 CA,但 没有 PoPo。 CA 对其进行签名并向我发送证书,其中现在包含我的姓名和您的 public 密钥。
- 有时,您向第三方(例如您的银行)发送了经过数字签名(使用您的私钥)的消息,要求他们向 Stack Overflow 捐赠 1000 美元。
- 您后来决定将这 1000 美元花在假期上更好,因此您向银行提出了对签名邮件的异议。
- 银行说但是您对邮件进行了数字签名以对其进行身份验证!!
- 如您所知,CA 在没有 PoPo 的情况下签署证书,您只需说我一定是发送了消息,使用您的私钥,我现在已经销毁了私钥以试图隐藏证据。
- 银行无法证明 (6) 不正确,因为他们没有检查我是否拥有与我请求中的 public 密钥相对应的私钥,因此您的 不是我干的不能拒绝-银行必须给你报销。
如果银行在我向 CA 提交您的 public 密钥时坚持使用 PoPo,我的请求将失败,并且您以后无法否认您的消息。但是一旦 CA 在没有 PoPo 的情况下签署请求 - 所有赌注都不会被拒绝。
Eventually, does CA generate a certificate from CSR and how it derives the public key of the server from CSR?
无需进行派生 - 您的服务器的 public 密钥位于请求中名为 CertificateRequestInfo.
的构造中
此 CertificateRequestInfo 包含您的(或服务器的)名称和 public 密钥。它还可以包含其他元素,例如请求的扩展。 CA 从这个 CertificateRequestInfo 中获取它需要的任何信息(只有 public 密钥是必需的)并使用该信息生成一个名为 tbsCertificate 的结构('tbs'代表待签名)。此构造包含您的姓名、您的 public 密钥以及 CA 认为合适的任何扩展名。然后它会签署此 tbsCertificate 以创建您的证书。
我试图揭开 CSR 的生成方式以及 public 和私钥的作用。
服务器 1:
- 生成public和私钥
现在,我想要 CSR,为此,我将去 CA 进行签名。
对于创建 CSR 请求,它是基于服务器的 public 密钥还是私钥?
我提到了这个SO question;在那里,它说服务器(正在请求 CSR)在将 CSR 发送到 CA 之前,它自己通过其私钥签署 CSR。
有点迷茫,有以下问题:
最终产品(CA签署的证书):它包含服务器的私钥还是public密钥?我了解最终产品应包含请求 CSR 的服务器的 public 密钥。
发起CSR请求时,为什么服务器需要用自己的私钥对CSR进行签名?正确吗?
服务器的public是CSR的关键部分吗?
最后,CA是否从CSR生成证书以及它如何从CSR导出服务器的public密钥?
The end product (the signed certificate by CA): Does it contain server's private key or public key?
证书是 public 文件。因此它只能包含 public 键。如果它包含私钥,那么该密钥将不再是私钥。
While initiating a CSR request, why a server needs to sign a CSR by its private key? Is it correct?
是的,大体上是正确的。这个概念称为所有权证明 (PoPo),它用于向 CA 证明您(或本例中的服务器)拥有与 public 密钥相对应的私钥,该密钥将由 CA(或至少在 CA 签署您的证书之前拥有它)。如果 CA 不坚持 PoPo,那么您可以拒绝任何已签名的未来消息,如下所示:
- 您的 public 密钥已由 CA 签名以创建您的证书。当时,您可以使用您的私钥对您的请求进行签名。一切都很好。
- 我过来从您的证书中复制您的 public 密钥。我现在将其作为 CSR 提交给 CA,但 没有 PoPo。 CA 对其进行签名并向我发送证书,其中现在包含我的姓名和您的 public 密钥。
- 有时,您向第三方(例如您的银行)发送了经过数字签名(使用您的私钥)的消息,要求他们向 Stack Overflow 捐赠 1000 美元。
- 您后来决定将这 1000 美元花在假期上更好,因此您向银行提出了对签名邮件的异议。
- 银行说但是您对邮件进行了数字签名以对其进行身份验证!!
- 如您所知,CA 在没有 PoPo 的情况下签署证书,您只需说我一定是发送了消息,使用您的私钥,我现在已经销毁了私钥以试图隐藏证据。
- 银行无法证明 (6) 不正确,因为他们没有检查我是否拥有与我请求中的 public 密钥相对应的私钥,因此您的 不是我干的不能拒绝-银行必须给你报销。
如果银行在我向 CA 提交您的 public 密钥时坚持使用 PoPo,我的请求将失败,并且您以后无法否认您的消息。但是一旦 CA 在没有 PoPo 的情况下签署请求 - 所有赌注都不会被拒绝。
Eventually, does CA generate a certificate from CSR and how it derives the public key of the server from CSR?
无需进行派生 - 您的服务器的 public 密钥位于请求中名为 CertificateRequestInfo.
的构造中此 CertificateRequestInfo 包含您的(或服务器的)名称和 public 密钥。它还可以包含其他元素,例如请求的扩展。 CA 从这个 CertificateRequestInfo 中获取它需要的任何信息(只有 public 密钥是必需的)并使用该信息生成一个名为 tbsCertificate 的结构('tbs'代表待签名)。此构造包含您的姓名、您的 public 密钥以及 CA 认为合适的任何扩展名。然后它会签署此 tbsCertificate 以创建您的证书。