我正在创建一个Windows窗体应用程序,该程序将证书导入本地商店-我想做的是在可能的情况下将其与现有私钥配对。
我知道这是可能的,因为我可以在证书上手动使用certreq -accept命令,并将它配对就可以了。
X509Certificate2 certificate = new X509Certificate2(fileName);
X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadWrite);
certStore.Add(certificate);
certStore.Close();
代码的效果很好-只是没有将其与相应的私钥匹配,我知道这是存在的,因为命令行certreq -accept可以导入并匹配它。如果有人知道如何使用代码来匹配该功能(不在代码中运行命令行),我将不胜感激。
(旁注-获取certutil -repairstore的功能也很好)
答案 0 :(得分:0)
certreq -accept
的流为:
new X509Store("Request", StoreLocation.LocalMachine)
)var withKey = newCert.CopyWithPrivateKey(requestCert.GetRSAPrivateKey());
)withKey
证书添加到“我的商店”(CurrentUser或LocalMachine,以与密钥和自签名证书匹配的位置为准)requestCert
。所有这些都可以在C#中解决。对于“相同的公共密钥”,最简单的方法是比较newCert.PublicKey和requestCert.PublicKey的Oid,EncodedKeyValue和EncodedParameters属性。