首页 > 解决方案 > 进行 SSL 连接时需要主机名验证

问题描述

在建立 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;
        }
    }
}

标签: c#asp.netsslssl-certificate

解决方案


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

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

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

如果RemoteCertificateChainErrors设置了,那么该chain对象将指出它无效的原因(某些内容已过期,根不受信任,以及更多潜在问题)。

所以,最简单的答案(在没有注册回调之后)是return errors == SslPolicyErrors.None;


推荐阅读