【发布时间】:2020-09-23 00:16:33
【问题描述】:
我尝试使用 dot-net 创建一个私钥-公钥对并将其安装在本地密钥库中。当私钥没有与公钥一起安装时,我感到很困惑,然后我注意到尽管证书将HasPrivateKey 属性设置为true,但实际的PrivateKey 属性是null。如何将私钥和公钥都添加到 Windows 密钥库?以后端口绑定需要证书。
我当前的代码基本上是这样的:
public static X509Certificate2 CreateSelfSigned(string issuer="", string firendly_name = "")
{
using (var key = RSA.Create(4096))
{
var req = new CertificateRequest(
$"CN={issuer}",
key,
HashAlgorithmName.SHA256,
RSASignaturePadding.Pkcs1);
req.CertificateExtensions.Add(
new X509BasicConstraintsExtension(true, false, 0, true));
req.CertificateExtensions.Add(
new X509EnhancedKeyUsageExtension(
new OidCollection
{
// Server Authentifikation
new Oid("1.3.6.1.5.5.7.3.2"),
// Client Authentifikation
new Oid("1.3.6.1.5.5.7.3.1")
},
true));
req.CertificateExtensions.Add(
new X509SubjectKeyIdentifierExtension(req.PublicKey, false));
var cert = req.CreateSelfSigned(DateTimeOffset.UtcNow.AddDays(-1),
DateTimeOffset.UtcNow.AddYears(30));
cert.FriendlyName = firendly_name;
using (var store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
{
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();
}
}
}
我已经搜索了互联网,但找不到适合我的解决方案。真的为这个问题挠了好几个小时。该程序是一种安装程序类型的程序,以前称为 PowerShell 来创建一个自签名证书,该证书只工作了一半,而且很脏。由于项目限制,我仅限于 dot-net 4.7.2 并且不能非常依赖外部库。
【问题讨论】:
标签: c# .net windows private-key x509certificate2