Wap*_*pac 19 c# pfx x509certificate2 .net-core
我目前所做的是使用OpenSSL生成PFX文件.这导致了不必要的依赖,特别是对于Windows用户.所以我找到了一些关于如何使用BouncyCastle创建自己的证书的示例,但是这个库不兼容.NET Core(或者我找不到兼容的包).
那么,是否可以仅使用.NET内核创建自己的自签名X509证书,以避免依赖OpenSSL(或任何其他证书生成外部工具)?
编辑:有人(编辑?)建议这个问题如何使用C#创建自签名证书?提供了答案.遗憾的是,这与.NET Core无关.接受的答案从那开始This implementation uses the CX509CertificateRequestCertificate COM object (and friends - MSDN doc) from certenroll.dll to create a self signed certificate request and sign it
,显然不是.NET Core ......实际上,没有一个答案是.NET Core兼容的.
Mus*_*ata 23
我发现了另一个让我走上正轨的问题.证书API已添加到2.0版本的.Net Core.我有一个类似下一个的功能来创建自签名证书,我稍后导入我的商店以在IIS上使用它们.
private X509Certificate2 buildSelfSignedServerCertificate()
{
SubjectAlternativeNameBuilder sanBuilder = new SubjectAlternativeNameBuilder();
sanBuilder.AddIpAddress(IPAddress.Loopback);
sanBuilder.AddIpAddress(IPAddress.IPv6Loopback);
sanBuilder.AddDnsName("localhost");
sanBuilder.AddDnsName(Environment.MachineName);
X500DistinguishedName distinguishedName = new X500DistinguishedName($"CN={CertificateName}");
using (RSA rsa = RSA.Create(2048))
{
var request = new CertificateRequest(distinguishedName, rsa, HashAlgorithmName.SHA256,RSASignaturePadding.Pkcs1);
request.CertificateExtensions.Add(
new X509KeyUsageExtension(X509KeyUsageFlags.DataEncipherment | X509KeyUsageFlags.KeyEncipherment | X509KeyUsageFlags.DigitalSignature , false));
request.CertificateExtensions.Add(
new X509EnhancedKeyUsageExtension(
new OidCollection { new Oid("1.3.6.1.5.5.7.3.1") }, false));
request.CertificateExtensions.Add(sanBuilder.Build());
var certificate= request.CreateSelfSigned(new DateTimeOffset(DateTime.UtcNow.AddDays(-1)), new DateTimeOffset(DateTime.UtcNow.AddDays(3650)));
certificate.FriendlyName = CertificateName;
return new X509Certificate2(certificate.Export(X509ContentType.Pfx, "WeNeedASaf3rPassword"), "WeNeedASaf3rPassword", X509KeyStorageFlags.MachineKeySet);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想要pfx,X509Certificate2上的Export函数应该可以解决问题.它返回带有原始pfx数据的字节数组.
小智 -9
Microsoft 的方法是使用 makecert 和 pvk2pfx(来自 Windows SDK)来完成此操作,而不是在 .net 代码本身中。现在我对.net core还不是很熟悉,但是由于完整的.net没有原生支持,如果core版本有这个功能的话我会非常惊讶。
以下是如何执行此操作的说明: https ://msdn.microsoft.com/en-us/library/ff699202.aspx
编辑:让我重新表述一下:没有外部依赖项,它在 .net(核心)中不可用。在成熟的 .net 中有一些方法,但您需要外部 dll。