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
第一個句點 (.) ,其餘字元必須完全相符。 - 如果沒有主體別名延伸模組,或延伸模組沒有適當類型的任何專案,則會使用一般名稱比對作為後援。
- 針對一般名稱比對,如果主體名稱包含單一通用名稱,而且該屬性未定義為多重值相對辨別名稱的一部分,則主機名會與 Common Name 屬性值進行比對。
請注意,通配符不會用於一般名稱比對中。
此實作會將 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) 擴充密鑰使用方式。