【问题标题】:Need hostname verification while making SSL connection进行 SSL 连接时需要主机名验证
【发布时间】:2019-05-01 15:21:14
【问题描述】:

在建立 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.net ssl ssl-certificate


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 你能用上面示例的代码语言向我解释一下吗
    • @HarjotSingh CertificationValidationCallBack = (cer, chain, error, o) => error == SslPolicyErrors.None。或者if (error == SslPolicyErrors.None) 是您的成功检查。
    • 我在哪里可以确认系统是否已经完成了这些检查。这真的很有帮助
    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 2015-11-30
    • 1970-01-01
    • 2019-03-09
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多