X509Certificate2.MatchesHostname(String, Boolean, Boolean) 方法

定义

检查证书是否与提供的主机名匹配。

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) 扩展密钥用法。

适用于