为测试目的生成 X509Certificate2 的最简单方法
Simplest way to generate a X509Certificate2 for testing purposes
我正在测试我的软件,我使用这个函数在启动时(在内存中)生成随机证书:
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;
public X509Certificate CreateX509Certificate2(string certName = "Default cert")
{
var ecdsa = ECDsa.Create();
var rsa = RSA.Create();
var req = new CertificateRequest($"cn={certName}", rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
var cert = req.CreateSelfSigned(DateTimeOffset.Now, DateTimeOffset.Now.AddYears(1));
return new X509Certificate2(cert.Export(X509ContentType.Pfx, "password"), "password");
}
这种方法有什么缺点吗?证书是否足够“真实”以用于测试目的?
我发现的几乎所有示例都使用第三方库,如 BouncyCastle,但我看不出使用它的目的?
(我知道有效的证书是由受信任的 CA 签署的,但我会在软件处于 Beta 版时做这件事)
许多示例将为此使用 Bouncy Castle,因为 CertificateRequest 最近才添加到 .NET。
class 创建了大部分用于 .NET Core 单元测试的证书,它绝对可以创建语法上有效的证书。
我正在测试我的软件,我使用这个函数在启动时(在内存中)生成随机证书:
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;
public X509Certificate CreateX509Certificate2(string certName = "Default cert")
{
var ecdsa = ECDsa.Create();
var rsa = RSA.Create();
var req = new CertificateRequest($"cn={certName}", rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
var cert = req.CreateSelfSigned(DateTimeOffset.Now, DateTimeOffset.Now.AddYears(1));
return new X509Certificate2(cert.Export(X509ContentType.Pfx, "password"), "password");
}
这种方法有什么缺点吗?证书是否足够“真实”以用于测试目的?
我发现的几乎所有示例都使用第三方库,如 BouncyCastle,但我看不出使用它的目的?
(我知道有效的证书是由受信任的 CA 签署的,但我会在软件处于 Beta 版时做这件事)
许多示例将为此使用 Bouncy Castle,因为 CertificateRequest 最近才添加到 .NET。
class 创建了大部分用于 .NET Core 单元测试的证书,它绝对可以创建语法上有效的证书。