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 |