WCF的傳輸安全機制
Windows Communication Foundation (WCF) 中的傳輸安全機制取決于使用的綁定和后續(xù)傳輸。例如,當使用 WSHttpBinding 類時,傳輸為 HTTP,保證傳輸安全的主要機制為 HTTP 上的安全套接字層 (SSL)(通常稱為 HTTPS)。本主題討論 WCF 系統(tǒng)提供的綁定中使用的主要傳輸安全機制。
注意:
將 SSL 安全與 .NET Framework 3.5 和更高版本一起使用時,WCF 客戶端將使用其證書存儲區(qū)中的中間證書和 SSL 協(xié)商期間收到的中間證書,對服務的證書執(zhí)行證書鏈驗證。.NET Framework 3.0 僅使用本地證書存儲區(qū)中安裝的中間證書。
BasicHttpBinding
默認情況下,BasicHttpBinding 類不提供安全。此綁定旨在提供與不實現(xiàn)安全機制的 Web 服務提供程序的互操作性。但可以通過將 Mode 屬性設置為 None 以外的值來啟用安全。若要啟用傳輸安全,請將該屬性設置為 Transport。
BasicHttpBinding 類主要用于與現(xiàn)有的 Web 服務和由 Internet 信息服務 (IIS) 承載的許多服務進行互操作。因此,此綁定的傳輸安全旨在實現(xiàn)與 IIS 站點的無縫互操作。通過將安全模式設置為 Transport,然后設置客戶端憑據(jù)類型可以實現(xiàn)這一目的。憑據(jù)類型值對應于 IIS 目錄安全機制。下面的代碼演示如何設置模式以及如何將憑據(jù)類型設置為 Windows。當客戶端和服務器在同一個 Windows 域中時,您可以使用此配置。
或在配置中:
- <bindings> <basicHttpBinding> <binding name="SecurityByTransport"> <security mode="Transport"> <transport clientCredentialType="Windows" /> </security> </binding> </basicHttpBinding></bindings>
以下幾節(jié)討論其他客戶端憑據(jù)類型。
基本
這對應于 IIS 中的基本身份驗證方法。使用此模式時,必須為 IIS 服務器配置 Windows 用戶帳戶和適當?shù)?NTFS 文件系統(tǒng)權(quán)限。有關 IIS 6.0 的更多信息,請參見啟用基本身份驗證和配置領域名(可能為英文網(wǎng)頁)。有關 IIS 7.0 的更多信息,請參見 IIS 7.0 測試版本:配置基本身份驗證(可能為英文網(wǎng)頁)。
證書
IIS 有一個要求客戶端使用證書進行登錄的選項。此功能還可以使 IIS 將客戶端證書映射到 Windows 帳戶。有關 IIS 6.0 的更多信息,請參見在 IIS 6.0 中啟用客戶端證書(可能為英文網(wǎng)頁)。有關 IIS 7.0 的更多信息,請參見 IIS 7.0 測試版本:在 IIS 7.0 中配置服務器證書(可能為英文網(wǎng)頁)。
摘要式
摘要式身份驗證類似于基本身份驗證,但其具有以哈希形式而不是明文形式發(fā)送憑據(jù)的優(yōu)點。有關 IIS 6.0 的更多信息,請參見 IIS 6.0 中的摘要式身份驗證(可能為英文網(wǎng)頁)。有關 IIS 7.0 的更多信息,請參見 IIS 7.0 測試版本:配置摘要式身份驗證(可能為英文網(wǎng)頁)。
Windows
這對應于 IIS 中的集成 Windows 身份驗證。設置為此值時,還需要服務器位于使用 Kerberos 協(xié)議作為其域控制器的 Windows 域中。如果服務器不在支持 Kerberos 的域中,或者如果 Kerberos 系統(tǒng)失敗,您可以使用下一節(jié)中說明的 NT LAN Manager (NTLM) 值。有關 IIS 6.0 的更多信息,請參見 IIS 6.0 中的集成 Windows 身份驗證(可能為英文網(wǎng)頁)。有關 IIS 7.0 的更多信息,請參見 IIS 7.0 測試版本:在 IIS 7.0 中配置服務器證書(可能為英文網(wǎng)頁)。
NTLM
這可使服務器在 Kerberos 協(xié)議失敗時使用 NTLM 進行身份驗證。有關 在 IIS 6.0 中配置 IIS 的更多信息,請參見強制 NTLM 身份驗證(可能為英文網(wǎng)頁)。對于 IIS 7.0,Windows 身份驗證包括 NTLM 身份驗證。有關更多信息,請參見 IIS 7.0 測試版本:在 IIS 7.0 中配置服務器證書(可能為英文網(wǎng)頁)。
WSHttpBinding
WSHttpBinding 類專用于與實現(xiàn) WS* 規(guī)范的服務進行互操作。此綁定的傳輸安全為 HTTP 上的安全套接字層 (SSL),即 HTTPS。若要創(chuàng)建使用 SSL 的 WCF 應用程序,請使用 IIS 承載該應用程序?;蛘?,如果您要創(chuàng)建自承載的應用程序,請使用 HttpCfg.exe 工具將 X.509 證書綁定到計算機上的特定端口。端口號作為 WCF 應用程序的一部分以終結(jié)點地址的形式進行指定。使用傳輸模式時,終結(jié)點地址必須包括 HTTPS 協(xié)議,否則運行時將引發(fā)異常。有關更多信息,請參見 HTTP 傳輸安全。
對于客戶端身份驗證,請將 HttpTransportSecurity 類的 ClientCredentialType 屬性設置為 HttpClientCredentialType 枚舉值之一。枚舉值與 BasicHttpBinding 的客戶端憑據(jù)類型等同,并由 IIS 服務承載。
下面的示例演示與 Windows 的客戶端憑據(jù)類型一起使用的綁定。
WSDualHttpBinding
此綁定只提供消息級別的安全,不提供傳輸級別的安全。
NetTcpBinding
NetTcpBinding 類使用 TCP 進行消息傳輸。通過實現(xiàn) TCP 上的傳輸層安全性 (TLS) 為傳輸模式提供安全。由操作系統(tǒng)提供 TLS 實現(xiàn)。
也可以通過將 TcpTransportSecurity 類的 ClientCredentialType 屬性設置為 TcpClientCredentialType 值之一來指定客戶端的憑據(jù)類型,如果下面的代碼所示。
客戶端
在客戶端,必須使用 X509CertificateInitiatorClientCredential 類的 SetCertificate 方法指定證書。
注意: 如果您要使用 Windows 安全性,則不需要證書。
下面的代碼使用唯一標識證書的證書指紋。有關 證書的更多信息,請參見使用證書。
或者,在客戶端配置中的 behaviors 部分使用 clientCredentials element 指定證書。
- <behaviors> <behavior> <clientCredentials> <clientCertificate findValue= "101010101010101010101010101010000000000" storeLocation="LocalMachine" storeName="My" X509FindType="FindByThumbPrint"/> </clientCertificate> </clientCredentials> </behavior></behaviors>
NetNamedPipeBinding
NetNamedPipeBinding 類用于進行有效的計算機內(nèi)通信;也就是說,雖然可以在同一網(wǎng)絡上的兩臺計算機之間創(chuàng)建命名管道通道,但進程是在同一臺計算機上運行的。此綁定只提供傳輸級別的安全。在創(chuàng)建使用此綁定的應用程序時,終結(jié)點地址必須包括“net.pipe”作為終結(jié)點地址的協(xié)議。
WSFederationHttpBinding
使用傳輸安全時,此綁定與已頒發(fā)的令牌 (TransportWithMessageCredential) 一起使用 HTTP 上的 SSL(稱為 HTTPS)。有關 聯(lián)合身份驗證應用程序的更多信息,請參見聯(lián)合令牌與頒發(fā)的令牌。
NetPeerTcpBinding
NetPeerTcpBinding類是旨在使用對等網(wǎng)絡功能進行有效通信的一種安全傳輸。TCP 是協(xié)議,這與類和綁定的名稱相一致。當安全模式設置為“傳輸”時,綁定將實現(xiàn) TCP 上的 TLS。有關 對等功能的更多信息,請參見對等網(wǎng)絡。
MsmqIntegrationBinding 和 NetMsmqBinding
有關消息隊列(以前稱為 MSMQ)的傳輸安全的完整討論,請參見使用傳輸安全保護消息。
【編輯推薦】