X509Certificate2.MatchesHostname(String, Boolean, Boolean) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
检查证书是否与提供的主机名匹配。
public bool MatchesHostname (string hostname, bool allowWildcards = true, bool allowCommonName = true);
member this.MatchesHostname : string * bool * bool -> bool
Public Function MatchesHostname (hostname As String, Optional allowWildcards As Boolean = true, Optional allowCommonName As Boolean = true) As Boolean
参数
- hostname
- String
要与之匹配的主机名。
- allowWildcards
- Boolean
true
如果允许对使用者可选名称扩展中的值进行 dNSName
通配符匹配,则为 ;否则为 false
。
- allowCommonName
- Boolean
true
以允许匹配使用者公用名值;否则为 false
。
返回
true
如果证书与请求的主机名匹配,则为 ;否则 false
例外
参数 hostname
不是有效的 DNS 主机名或 IP 地址。
注解
此方法是 IETF RFC 6125 主机匹配逻辑的与平台无关的实现。 SslStream 类使用操作系统中的主机名验证程序,这可能会导致此实现的值不同。
此方法的逻辑流为:
- 如果主机名分析为 , IPAddress 则完成 IPAddress 匹配;否则,DNS 名称匹配完成。
- 对于 IPAddress 匹配,该值必须与使用者可选名称扩展的条目中的值完全匹配
iPAddress
。 - 对于 DNS 名称匹配,该值必须与使用者可选名称扩展的条目中的值完全匹配
dNSName
,或者与同一项的通配符匹配。 - 对于通配符匹配,通配符必须是条目中的
dNSName
第一个字符,第二个字符必须是句点 (.) ,并且条目的长度必须大于 2。
通配符将只匹配hostname
到第一个句点 (.) 的值,其余字符必须是完全匹配的。 - 如果没有使用者可选名称扩展,或者该扩展没有任何相应类型的条目,则公用名匹配将用作回退。
- 对于公用名匹配,如果使用者名称包含单个公用名,并且该属性未定义为多值相对可分辨名称的一部分,则主机名与公用名属性的值匹配。
请注意,公用名匹配中不使用通配符。
此实现将 SRV-ID
值或 URI-ID
值视为范围外,并且不会将其存在作为阻止回退 DNS-ID
与 匹配 CN-ID
的原因。
此方法不会将非 ASCII 主机名转换为 IDNA 表示形式。 对于 Unicode 域,调用方必须使用 或等效的 IdnMapping IDNA 映射器。
此例程执行的“完全”匹配项为 OrdinalIgnoreCase,因为域名不区分大小写。
此方法不确定主机名是否由受信任的颁发机构授权。 如果不通过 X509Chain额外检查信任,则无法做出信任决策。
此方法不检查证书具有 id-kp-serverAuth
(1.3.6.1.5.5.7.3.1) 扩展密钥用法。