我尝试过通过.NET X509Certificate2 + RSACryptoServiceProvider实例导入基于BouncyCastle的X509Certificate实例以及相关的私钥(RsaPrivateCrtKeyParameters)并将其保存到证书存储中(.NET' s X509Store,My / CurrentUser)。
在证书存储MMC管理单元中,似乎存在与证书关联的私钥,并且我已经验证在磁盘上的适当位置创建了新的密钥容器,但是当我尝试导出时证书,我得到了可怕的"注意:找不到相关的私钥。只能导出证书"消息。
如果我运行 certutil -user -repairstore my THUMBPRINT ,我会收到以下错误:
错误:证书公钥与存储的密钥集不匹配
从它吐出的其他信息中,我可以清楚地看到公钥不同,并且算法参数等于" 05 00"在证书公钥上,但不在容器公钥上。
事实上,我并不知道有一个容器公钥的概念,所以我现在很困惑。有没有人有这方面的工作代码?
答案 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