c# - 进行 SSL 连接时需要主机名验证

标签 c# asp.net ssl ssl-certificate

我需要在建立 SSL 连接时验证 4 件事

  1. URL 中的主机名与 CN 和 SAN 证书匹配
  2. 服务器提供的证书由 CA 在信任库中签名
  3. 服务器证书未过期
  4. CA 证书未过期

代码:

options.withT1s(new MqttClientOptionsBuilderT1sParameters()
{
    CertificationValidationCallBack=(cer, chain, error, o) =>
    {
        if(//do checks here)
        {
          //    check pass
              return true;
        }
        else
        {
          //   check fail
             return false;
        }
    }
}

最佳答案

这四项检查已经由系统完成。如果您没有自定义回调,那正是为您强制执行的内容。

在自定义回调中,这些状态由 errorchain 参数表示... error 是一个 [Flags] 值.

如果设置了 RemoteCertificateNameMismatch,则名称与 SAN 条目不匹配(如果没有 SAN-DNS 条目,则为 CN 条目)——您的条件 (1)。

如果 RemoteCertificateChainErrors 被设置,那么 chain 对象将指出它无效的原因(有些东西已经过期,根不可信,以及更多潜在的问题).

因此,最简单的答案(在未注册回调之后)是return errors == SslPolicyErrors.None;

关于c# - 进行 SSL 连接时需要主机名验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55938578/

相关文章:

asp.net - 为什么Firebug中显示多个GET请求?

c++ - 在 C++ 中为 OpenSSL 中的 SSL_read 设置连接超时

Java SSLSockets : same keyStore on client and server, 安全吗?

amazon-web-services - 使用 aws-load-balancer-backend-protocol : "https" 时,nginx-ingress 不适用于 AWS ELB

c# - 这个宽度的数据类型是什么?

c# - 我怎样才能使 jCarousel 的宽度为 100% 而不是指定 px?

asp.net - ASP.NET v4无扩展URL功能在IIS 6.0上不起作用

c# - 从 C# 调用 powershell 脚本文件 (example.ps1)

c# - 是否可以一个接一个地删除多个注册表项?

html - CSS 转换在 .aspx 页面中不起作用