c# - 进行 SSL 连接时需要主机名验证
问题描述
在建立 SSL 连接时,我需要验证 4 件事
- URL 中的主机名与 CN 和 SAN 证书匹配
- 服务器提供的证书由 CA 在信任库中签名
- 服务器证书未过期
- CA 证书未过期
代码:
options.withT1s(new MqttClientOptionsBuilderT1sParameters()
{
CertificationValidationCallBack=(cer, chain, error, o) =>
{
if(//do checks here)
{
// check pass
return true;
}
else
{
// check fail
return false;
}
}
}
解决方案
这四项检查已经由系统完成。如果您没有自定义回调,那正是对您强制执行的。
在自定义回调中,这些状态由error
和chain
参数表示...error
是 [Flags] 值。
如果RemoteCertificateNameMismatch
已设置,则名称与 SAN 条目(如果没有 SAN-DNS 条目,则为 CN 条目)不匹配——您的条件 (1)。
如果RemoteCertificateChainErrors
设置了,那么该chain
对象将指出它无效的原因(某些内容已过期,根不受信任,以及更多潜在问题)。
所以,最简单的答案(在没有注册回调之后)是return errors == SslPolicyErrors.None;
推荐阅读
- html - Bootstrap 5 - 下拉菜单 - 无法与链接交互
- python - 如何使用 Button for Dash 和上传功能
- drupal - Drupal 6 更新到最新可用版本
- ios - Xamarin iOS - Firebase 核心和 Firebase 身份验证 | 错误
- node.js - 更新到 nextjs 11 后的 Micro MODULE_NOT_FOUND
- html - 响应式表格移动/桌面
- c# - .NET 导入,删除具有空标题列的结束列
- java - 如何更改小部件 listview.builder 中的布尔值并将其传递给另一个小部件?
- python - 在 qtstylesheet 中更改焦点的宽度和高度并悬停伪类
- jira - 是否有可能从 jira 源数据在 tableau 中生成实时报告?