2015-11-16 189 views
0

我已经尝试过使用相关私钥(RsaPrivateCrtKeyParameters)通过.NET X509Certificate2 + RSACryptoServiceProvider实例导入基于BouncyCastle的X509Certificate实例并保存到一个证书存储(.NET的X509Store,我的/当前用户)。将BouncyCastle X509证书+私钥(RSA)导入Windows证书存储

在证书存储MMC管理单元中,似乎有一个与证书关联的私钥,并且我已验证在磁盘上的相应位置创建了新的密钥容器,但是当我尝试导出证书,我得到了可怕的“注意:找不到关联的私钥,只能导出证书”消息。

如果我运行的certutil -user -repairstore我THUMBPRINT,我得到以下错误:

ERROR: Certificate public key does NOT match stored keyset

从它吐出其他信息,我可以清楚地看到,公共密钥不同,并且算法参数在证书公钥上等于“05 00”,但不在容器公钥上。

事实上,我不知道有一个容器公钥的概念,所以我现在只是很困惑。有没有人有这样做的工作代码?

+0

不知道你的代码的样子,但我(从充气城堡出口为.pfx文件,然后导入到通过BCL类店)作品完美无瑕。私人钥匙和证书的合并在Bouncy Castle一侧进行,而不是在BCL。 –

回答

1

我发现这里的Cabadam的答案的解决方案: https://social.msdn.microsoft.com/Forums/vstudio/en-US/ad01b2eb-1890-431a-86ae-e5da0e02b5b0/cryptographicexception-key-does-not-exist-when-attempting-to-connect-to-remote-service

RSACryptoServiceProvider tempRcsp = (RSACryptoServiceProvider)DotNetUtilities.ToRSA((RsaPrivateCrtKeyParameters)keyPair.Private); 
    RSACryptoServiceProvider rcsp = new RSACryptoServiceProvider(new CspParameters(1, "Microsoft Strong Cryptographic Provider", new Guid().ToString(), new CryptoKeySecurity(), null)); 
    rcsp.ImportCspBlob(tempRcsp.ExportCspBlob(true)); 
    dotnetCertificate2.PrivateKey = rcsp; 
// Save the certificate to the X509Store