为测试目的生成 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 单元测试的证书,它绝对可以创建语法上有效的证书。