Share via


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 表示允許主體別名延伸模組中值的通配符比對 dNSNamefalse否則為 。

allowCommonName
Boolean

true 表示允許比對主體的通用名稱值;否則為 false

傳回

true 如果憑證符合要求的主機名,則為 ;否則 false

例外狀況

參數 hostname 不是有效的 DNS 主機名或 IP 位址。

憑證包含多個主體別名延伸模組。

-或-

無法譯碼主體別名延伸模組或主體名稱。

備註

此方法是IETF RFC 6125 主機比對邏輯的平臺中性實作。 SslStream 類別會使用來自操作系統的主機名驗證程式,這可能會導致此實作的不同值。

這個方法的邏輯流程如下:

  • 如果主機名剖析為 IPAddress ,則會完成IPAddress比對,否則會完成 DNS 名稱比對。
  • 針對IPAddress比對,此值必須與主體別名延伸模組專案中的值完全相符 iPAddress
  • 針對 DNS 名稱比對,此值必須與主體別名延伸模組專案中的值完全相符 dNSName ,或與相同的通配符相符。
  • 針對通配符比對,通配符必須是專案中的第一個字元,第二個字元 dNSName 必須是句點 (.) ,而且專案長度必須大於 2。
    通配符只會比對 hostname 第一個句點 (.) ,其餘字元必須完全相符。
  • 如果沒有主體別名延伸模組,或延伸模組沒有適當類型的任何專案,則會使用一般名稱比對作為後援。
  • 針對一般名稱比對,如果主體名稱包含單一通用名稱,而且該屬性未定義為多重值相對辨別名稱的一部分,則主機名會與 Common Name 屬性值進行比對。
    請注意,通配符不會用於一般名稱比對中。

此實作會將 SRV-ID 值或 URI-ID 值視為範圍不足,而且不會使用其存在作為停止後援與 DNS-IDCN-ID對的原因。

這個方法不會將非 ASCII 主機名轉換為 IDNA 表示法。 針對 Unicode 網域,呼叫端必須使用 IdnMapping 或對等的 IDNA 對應器。

此例程所執行的「確切」相符專案為 OrdinalIgnoreCase,因為功能變數名稱不區分大小寫。

這個方法不會判斷主機名是否由受信任的授權單位授權。 不需透過 另外檢查信任 X509Chain,就無法做出信任決策。

此方法不會檢查憑證是否有 id-kp-serverAuth (1.3.6.1.5.5.7.3.1) 擴充密鑰使用方式。

適用於