有没有办法使用 C# 获得命令行 certreq -accept 的功能?
Is there a way to get the functionality of command line certreq -accept using C#?
我正在创建一个将证书导入本地存储的 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 的功能也很棒)
certreq -accept
的流量是:
- 打开请求存储(例如
new X509Store("Request", StoreLocation.LocalMachine)
)
- 找到与签名证书使用相同 public 密钥的 self-signed 证书(该证书由 certreq 创建)
- 将私钥复制到新证书(例如
var withKey = newCert.CopyWithPrivateKey(requestCert.GetRSAPrivateKey());
)
- 将
withKey
证书添加到我的商店(CurrentUser 或 LocalMachine,以匹配密钥和 self-signed 证书的位置为准)
- 从请求存储中删除
requestCert
。
所有这些都可以在 C# 中解决。对于 "same public key",最简单的方法是比较 newCert.PublicKey 和 requestCert.PublicKey 的 Oid、EncodedKeyValue 和 EncodedParameters 属性。
我正在创建一个将证书导入本地存储的 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 的功能也很棒)
certreq -accept
的流量是:
- 打开请求存储(例如
new X509Store("Request", StoreLocation.LocalMachine)
) - 找到与签名证书使用相同 public 密钥的 self-signed 证书(该证书由 certreq 创建)
- 将私钥复制到新证书(例如
var withKey = newCert.CopyWithPrivateKey(requestCert.GetRSAPrivateKey());
) - 将
withKey
证书添加到我的商店(CurrentUser 或 LocalMachine,以匹配密钥和 self-signed 证书的位置为准) - 从请求存储中删除
requestCert
。
所有这些都可以在 C# 中解决。对于 "same public key",最简单的方法是比较 newCert.PublicKey 和 requestCert.PublicKey 的 Oid、EncodedKeyValue 和 EncodedParameters 属性。