建立SSL连接时需要验证主机名

时间:2019-05-01 15:21:14

标签: 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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这四项检查已由系统完成。如果您没有自定义回调,那么这正是为您实施的。

在自定义回调中,它们的状态由errorchain参数表示。error是[Flags]值。

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

如果设置了RemoteCertificateChainErrors,则chain对象将指出其无效的原因(某些内容已过期,根目录不受信任,还有很多潜在的问题)。

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