将BouncyCastle X509Certificate +私钥(RSA)导入Windows证书存储区

时间:2015-11-16 13:29:40

标签: c# x509certificate bouncycastle

我尝试过通过.NET X509Certificate2 + RSACryptoServiceProvider实例导入基于BouncyCastle的X509Certificate实例以及相关的私钥(RsaPrivateCrtKeyParameters)并将其保存到证书存储中(.NET' s X509Store,My / CurrentUser)。

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

如果我运行 certutil -user -repairstore my THUMBPRINT ,我会收到以下错误:

  

错误:证书公钥与存储的密钥集不匹配

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

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

1 个答案:

答案 0 :(得分: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