類別 System.Net 支持數種方式來選取及驗證 System.Security.Cryptography.X509Certificates 安全套接字層 (SSL) 連線。 用戶端可以選取一或多個憑證,向伺服器驗證自己。 伺服器可能需要客戶端憑證具有一或多個特定屬性來進行驗證。
定義
憑證是 ASCII 位元組數據流,其中包含公鑰、屬性(例如版本號碼、序號和到期日),以及證書頒發機構單位的數位簽名。 憑證可用來建立加密的連線,或向伺服器驗證用戶端。
用戶端憑證選取和驗證
用戶端可以針對特定 SSL 連線選取一或多個憑證。 用戶端憑證可以與 Web 伺服器或 SMTP 郵件伺服器的 SSL 連線相關聯。 用戶端會將憑證新增至X509Certificate或X509Certificate2類別物件的集合中。 使用電子郵件做為範例,憑證集合是 與X509CertificateCollection類別的 ClientCertificates 屬性相關聯的 SmtpClient 實例。 類別 HttpWebRequest 具有類似的 ClientCertificates 屬性。
主要差異在於X509Certificate類別和X509Certificate2類別之間,私人密鑰必須存在於X509Certificate類別的證書存儲中。
即使憑證新增至集合並與特定 SSL 連線相關聯,除非伺服器要求憑證,否則不會將憑證傳送至伺服器。 如果在連線上設定多個用戶端憑證,最佳憑證會根據演算法來使用,該演算法會考慮伺服器所提供的憑證簽發者清單與客戶端憑證簽發者名稱之間的相符專案。
類別 SslStream 提供對 SSL 交握的更多控制權。 用戶端可以指定委派來挑選要使用的用戶端憑證。
遠端伺服器可以驗證客戶端憑證是否有效、目前且由適當的證書頒發機構單位簽署。 可以新增委派至 ServerCertificateValidationCallback,以強制執行憑證驗證。
用戶端憑證選取
.NET Framework 會選取要以下列方式呈現給伺服器的用戶端憑證:
如果先前向伺服器呈現客戶端憑證,則會在第一次呈現時快取憑證,並重複使用供後續客戶端憑證要求使用。
如果委派存在,請一律使用委派的結果作為客戶端憑證來選取。 儘可能嘗試使用快取的憑證,但如果委派傳回 Null 且憑證集合不是空的,請勿使用快取的匿名認證。
如果這是客戶端憑證的第一次驗證,則 Framework 會列舉在與連線相關的X509Certificate或X509Certificate2類別對象中的憑證,尋找伺服器所提供的憑證簽發者清單與客戶端憑證簽發者名稱之間的相符項目。 符合的第一個憑證會傳送至伺服器。 如果沒有符合憑證,或憑證集合是空的,則會將匿名認證傳送至伺服器。
憑證組態的工具
有多種工具可用於用戶端和伺服器證書組態。
Winhttpcertcfg.exe 工具可用來設定客戶端憑證。 Winhttpcertcfg.exe 工具是以 Windows Server 2003 資源套件的其中一個工具的形式提供。 此工具也可作為 Windows Server 2003 Resource Kit Toolswww.microsoft.com的一部分下載。
HttpCfg.exe 工具可用來設定 類別的伺服器HttpListener憑證。 HttpCfg.exe 工具是 Windows Server 2003 和 Windows XP Service Pack 2 的支援工具之一。 HttpCfg.exe 和其他支援工具預設不會安裝在 Windows Server 2003 或 Windows XP 上。 在 Windows Server 2003 上。 支援工具會與 Windows Server 2003 CD-ROM 上的下列資料夾和檔案分開安裝:
\Support\Tools\Suptools.msi
若要搭配 Windows XP Service Pack 2 使用,您可以從 www.microsoft.com下載 Windows XP 支援工具。
HttpCfg.exe 工具版本的原始程式碼也會以 Windows Server SDK 的範例的形式提供。 根據預設, HttpCfg.exe 範例的原始程式碼會隨網路範例一起安裝,做為下列資料夾下 Windows SDK 的一部分:
C:\Program Files\Microsoft SDKs\Windows\v1.0\Samples\NetDS\http\serviceconfig
除了這些工具之外, X509Certificate 和 X509Certificate2 類別還提供從文件系統載入憑證的方法。