【问题标题】:Digital signature for CSR with different private key具有不同私钥的 CSR 数字签名
【发布时间】:2017-12-25 16:46:59
【问题描述】:

我们使用 C# 和 bouncy castle .net 库来实现一项功能。假设我们作为网站_A 为最终客户生成 CSR,然后最终客户将我们生成的 CSR 带到我们的业务合作伙伴网站_B 以获得证书。

以前它工作得非常好。注意 keyPair.Public 和 keyPair.Private 来自同一个 RSA 密钥对。生成的 CSR 可以在这里验证,没有任何问题 https://certlogik.com/decoder

        Pkcs10CertificationRequest request = new Pkcs10CertificationRequest(
            "SHA256withRSA",
            new X509Name(subject),
            keyPair.Public,
            null,
            keyPair.Private);

但是,我们的业务合作伙伴 website_B 希望验证最终客户提交/上传的任何 CSR 不仅是有效的 CSR,而且确实是由我们 (website_A) 生成的。因此,我们创建了一对新的 RSA 密钥并将新的公钥传递给 website_B 并使用新的私钥签署任何新的 CSR。所以我们的代码更新如下。请注意,keyPair.Public 和 newKeyPair.Privae 来自不同的 RSA 密钥对。该代码仍然可以生成 CSR,但验证失败,例如 https://certlogik.com/decoder。很奇怪,尽管我们的业务合作伙伴 website_B 仍然可以使用 newKeyPair.Public 解析/解码新格式的 CSR,但如果跳过了 CSR 验证步骤,我们将传递给他们。

        Pkcs10CertificationRequest request = new Pkcs10CertificationRequest(
            "SHA256withRSA",
            new X509Name(subject),
            keyPair.Public,
            null,
            newKeyPair.Private);

所以我的qns是:

  1. 是我们的业务合作伙伴网站_B 数字签名要求 企业社会责任(这样他们就可以确定企业社会责任是由我们产生的)声音?

  2. 如果是,我们如何将 CSR 的数字签名附加到原始 CSR。请注意 Pkcs10CertificationRequest 只能使用一个私钥。

  3. 还有其他方法可以使用不同的私钥对 CSR 进行数字签名吗?

【问题讨论】:

    标签: c# digital-signature bouncycastle csr


    【解决方案1】:
    1. 我们的业务合作伙伴 website_B 对 CSR 数字签名的要求(以便他们确定 CSR 是我们生成的)是否合理?

    您的合作伙伴想要一份带有数字签名的真实性证明。这很常见,数字签名就是为此而设计的。

    1. 如果是,我们如何将 CSR 的数字签名附加到原始 CSR。请注意,Pkcs10CertificationRequest 只能使用一个私钥。

    CSR 必须使用证书请求者的私钥签名,并且必须与嵌入的公钥匹配。您将 CSR 用作数字签名容器,可以证明 website_A 已生成 CSR,但对证书颁发机构无效,以确保请求者有效地拥有私钥。因此证书注册过程是无效的。

    因为 CSR 不是为此目的而设计的。我建议:

    1. 在带有 website_A 私钥的原始 CSR 上使用附加数字签名。不需要将此签名附加到 CSR 中。只需使用分离的签名或已知格式,如 CMS 或 XMLDSig

    2. 使用自定义证书签名请求格式。您确实不需要标准 PKCS#10,因为您在 A 和 B 之间已经有一个自定义注册过程。使用标准具有明显的优势,但在您的情况下,它是可消耗的,因为仅在初始注册过程中使用。请注意,CSR 在生成后被丢弃,CSR 与颁发的证书之间没有直接关系。您可以定义自定义格式,包括请求者的公钥、生成证书所需的数据以及 A 和 B 的两个签名

    1. 还有其他方法可以使用不同的私钥对 CSR 进行数字签名吗?

    不,见上文

    【讨论】:

      猜你喜欢
      • 2018-07-26
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 2012-03-17
      • 2012-01-24
      • 1970-01-01
      • 2018-06-07
      相关资源
      最近更新 更多