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