我们使用C#和bouncy城堡.net库来实现特性。假设我们作为一个website_A为最终客户生成CSR,那么最终客户将使用我们生成的CSR到我们的业务合作伙伴website_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是:
发布于 2017-07-20 07:54:54
你的搭档想要一个数字签名的真实性证明。这是通常的,数字签名是为此而设计的。
CSR必须使用证书请求者的私钥签名,并且必须与嵌入的公钥匹配。您正在使用CSR作为数字签名容器,该容器可以证明website_A生成了CSR,但证书颁发机构无法确保请求者有效地拥有私钥。因此,证书注册处理它是无效的。
因为公司社会责任不是为此目的而设计的。我建议:
不,见上文
https://stackoverflow.com/questions/45207061
复制相似问题