Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有不同私钥的CSR数字签名_C#_Digital Signature_Bouncycastle_Csr - Fatal编程技术网

C# 具有不同私钥的CSR数字签名

C# 具有不同私钥的CSR数字签名,c#,digital-signature,bouncycastle,csr,C#,Digital Signature,Bouncycastle,Csr,我们正在使用C#和bouncy castle.net库来实现一个特性。假设我们作为一个网站为最终客户生成CSR,那么最终客户将把我们生成的CSR带到我们的业务合作伙伴网站获取证书 以前它工作得非常好。注意keyPair.Public和keyPair.Private来自同一个RSA密钥对。生成的CSR可以在这里进行验证,没有任何问题 然而,我们的业务合作伙伴网站_B希望验证最终客户提交/上传的任何CSR不仅是有效的CSR,而且确实是由我们生成的(网站_A)。因此,我们创建了一对新的RSA密钥,并将

我们正在使用C#和bouncy castle.net库来实现一个特性。假设我们作为一个网站为最终客户生成CSR,那么最终客户将把我们生成的CSR带到我们的业务合作伙伴网站获取证书

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

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

        Pkcs10CertificationRequest request = new Pkcs10CertificationRequest(
            "SHA256withRSA",
            new X509Name(subject),
            keyPair.Public,
            null,
            newKeyPair.Private);
因此,我的问题是:

  • 我们的业务合作伙伴网站是否需要数字签名 企业社会责任(以便他们能够确定企业社会责任是由我们产生的)的声音

  • 如果是,我们如何将CSR的数字签名附在原始CSR上。请注意Pkcs10CertificationRequest只能获取一个私钥

  • 是否有其他方法可以使用不同的私钥对CSR进行数字签名

  • 我们的业务合作伙伴网站对CSR数字签名的要求(以便他们能够确保CSR由我们生成)是否合理
  • 您的合作伙伴需要带有数字签名的真实性证明。这是常见的,数字签名就是为此而设计的

  • 如果是,我们如何将CSR的数字签名附在原始CSR上。请注意Pkcs10CertificationRequest只能获取一个私钥
  • CSR必须使用证书请求者的私钥签名,并且必须与嵌入的公钥匹配。您正在使用CSR作为数字签名容器,这可以证明网站_a已经生成了CSR,但对于证书颁发机构来说,这是无效的,无法确保请求者有效地拥有私钥。因此,证书注册过程无效

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

  • 使用带有网站A私钥的原始CSR上的附加数字签名。无需将此签名附加到CSR中。只需使用分离的签名或CMS或XMLDSig等已知格式

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

  • 是否有其他方法可以使用不同的私钥对CSR进行数字签名
  • 不,见上文

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