【发布时间】: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是:
是我们的业务合作伙伴网站_B 数字签名要求 企业社会责任(这样他们就可以确定企业社会责任是由我们产生的)声音?
如果是,我们如何将 CSR 的数字签名附加到原始 CSR。请注意 Pkcs10CertificationRequest 只能使用一个私钥。
还有其他方法可以使用不同的私钥对 CSR 进行数字签名吗?
【问题讨论】:
标签: c# digital-signature bouncycastle csr