了解 C# 中的自签名证书

2024-04-30

最近我遇到了这个c#代码:

var dn = new X500DistinguishedName($"CN={_appSettings.CommonName};OU={_appSettings.OrganizationalUnit}", X500DistinguishedNameFlags.UseSemicolons);
SubjectAlternativeNameBuilder sanBuilder = new SubjectAlternativeNameBuilder();
sanBuilder.AddUri(new Uri($"urn:{_appSettings.ApplicationUri}"));

using (RSA rsa = RSA.Create(2048))
{
    var request = new CertificateRequest(dn, rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

    request.CertificateExtensions.Add(sanBuilder.Build());

    var selfSignedCert = request.CreateSelfSigned(new DateTimeOffset(DateTime.UtcNow.AddDays(-1)), new DateTimeOffset(DateTime.UtcNow.AddDays(3650)));

    ...
}

...

仔细观察CertificateRequest构造函数参数,rsa密钥被描述为:

RSA 密钥,其公钥材料将包含在证书或证书请求中。如果调用 CreateSelfSigned(DateTimeOffset, DateTimeOffset) 方法,该密钥用作私钥。

粗体部分是我不太明白的部分。这是否意味着在自签名证书时,使用给定的 RSA 密钥对证书进行签名并添加same密钥作为证书的公钥?

根据我对 TLS 的理解,我们有两对公钥,一对用于签名,一对用于加密。 CA 使用其私钥签署证书,并向客户端提供公钥,以便通过使用公钥解密来验证签名,而服务提供商则提供公钥,客户端首先使用该公钥来加密其密钥。 tls 握手,然后使用服务提供商的私钥进行解密。

然而,在上面的代码示例中,我们创建的证书到底包含什么内容?服务器公钥用于加密,那么用什么密钥来解密签名呢?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 C# 中的自签名证书 的相关文章

随机推荐