最近我遇到了这个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(使用前将#替换为@)