关于C#:将BouncyCastle X509Certificate+私钥(RSA)导入Windows证书存储

Import BouncyCastle X509Certificate + Private Key (RSA) into Windows Certificate Store

我已经尝试过通过.NET X509Certificate2+rsAcryptoServiceProvider实例导入基于BouncyCastle的X509Certificate实例和关联的私钥(rsAprivateCrtKeyParameters),并将其保存到证书存储(.NET的X509Store,my/currentUser)。

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

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

ERROR: Certificate public key does NOT match stored keyset

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

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


我在卡巴丹的回答中找到了解决办法:https://social.msdn.microsoft.com/forums/vstudio/en-us/ad01b2eb-1890-431a-86ae-e5da0e02b5b0/cryptographicexception-key-does-not-exist-when-attaining-to-connect-to-remote-service

1
2
3
4
5
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