gpt4 book ai didi

c# - 如何使用 C# 验证 SSL 证书

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:19 25 4
gpt4 key购买 nike

也许你们中的一位可以帮助我回答有关在 .NET 框架中验证证书的问题。不幸的是,我在互联网上的研究过程中只找到了对我的问题的肤浅答案,而没有找到确切的解释。

同时我知道我可以使用以下代码检查我的软件证书是否有效。

ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificate;

private bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors)
{
return policyErrors == SslPolicyErrors.None;
}

但我现在想知道 Microsoft 在这里检查的到底是什么?框架执行了哪些检查以生成结果 SslPolicyErrors.None?

例如,根证书是否也在这里验证,它来自哪里?如果是这样,如何?

在您看来,是否仍然有必要(或有用)将我自己的检查添加到这些检查中,而 .NET Framework 尚未进行这些检查?

最佳答案

这部分只是 c# Validating an X509Certificate2: am I doing this right? 的重复,那里的简短答案是您免费获得的支票(没有自定义处理程序,或者已经在您的处理程序之前完成):

  • 证书链有效(否则 SslPolicyErrors.RemoteCertificateChainErrors 已设置)
    • 证书链接到受信任的根机构
    • 证书未过期(或未过期)
    • 该证书表明它打算用作 TLS 服务器证书
    • 如果根据请求启用了撤销(默认情况下处于关闭状态),则链中的任何证书都不会被撤销。
  • 证书适用于您连接到的主机名(否则设置了 SslPolicyErrors.RemoteCertificateNameMismatch)

For example, is the root certificate also validated here and where it comes from?

此处的证书验证使用与 Internet Explorer、Chrome、Edge、Outlook 等相同的根信任列表,在 Windows 中集中管理。 (Firefox 使用不同的根信任列表,该列表仅由 Firefox 管理。)

In your opinion ...

意见问题在 StackOverflow 上是题外话。

it still necessary (or useful) to add additionally my own checks to these checks, which the .NET Framework hasn't made yet?

视情况而定。

如果您正在联系自己的一台服务器,并且知道证书链的某些内容,则可以添加额外的检查。例如,您可能知道您的服务器使用 Let's Encrypt,并且您在应用程序中嵌入了来自 https://letsencrypt.org/certificates/ 的“Let's Encrypt Authority X3”证书。然后你可以固定中间体......你只需要确保在他们移动到新的中间体时使用react。

private bool ValidateRemoteCertificate(
object sender,
X509Certificate cert,
X509Chain chain,
SslPolicyErrors policyErrors)
{
if (policyErrors != SslPolicyErrors.None)
{
return false;
}

if (chain.ChainElements.Count != 3)
{
return false;
}

byte[] foundCert = chain.ChainElements[1].Certificate.RawData;

return s_letsEncryptX3Direct.SequenceEqual(foundCert) ||
s_letsEncryptX3Cross.SequenceEqual(foundCert);
}

如果您不打算执行额外的检查(或进行自定义日志记录等),那么最好不要注册回调,因为当没有注册回调时,内存和 CPU 的实现会更好一些。

关于c# - 如何使用 C# 验证 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57755028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com