資源描述:
《[WCF安全系列]服務(wù)憑證(Service Credential)與服務(wù)身份(Service Identity)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、[WCF安全系列]服務(wù)憑證(ServiceCredential)與服務(wù)身份(ServiceIdentity)在采用TLS/SSL實(shí)現(xiàn)Transport安全的情況下,客戶端對服務(wù)證書實(shí)施認(rèn)證。但是在默認(rèn)情況下,這種認(rèn)證僅僅是確保服務(wù)證書的合法性(通過數(shù)字簽名確保證書確實(shí)是由申明的CA頒發(fā))和可信任性(證書或者CA證書存儲于相應(yīng)的可信賴存儲區(qū))。而WCF提供服務(wù)證書并不限于此,客戶端對服務(wù)認(rèn)證的模式應(yīng)該是這樣的:服務(wù)端預(yù)先知道了服務(wù)的身份,在進(jìn)行服務(wù)調(diào)用之前,服務(wù)端需要提供相應(yīng)的憑證用以輔助客戶端確認(rèn)調(diào)用的服務(wù)具有預(yù)先確定的身份。對于這樣的服務(wù)認(rèn)證模式,具有兩個(gè)重要的概念,即服務(wù)憑
2、證和服務(wù)身份。目錄:一、服務(wù)憑證(ServiceCredential)二、服務(wù)身份(ServiceIdentity)三、服務(wù)憑證協(xié)商(ServiceCredentialsNegotiation)一、服務(wù)憑證(ServiceCredential)認(rèn)證就是通過對對方提供的憑證進(jìn)行檢驗(yàn)以確定對方身份的一個(gè)過程,從這個(gè)意義上講服務(wù)認(rèn)證和客戶端認(rèn)證并沒有本質(zhì)的區(qū)別。但有服務(wù)認(rèn)證確實(shí)有一點(diǎn)和客戶端認(rèn)證不同:客戶端在對服務(wù)進(jìn)行認(rèn)證之前就預(yù)先確定了服務(wù)應(yīng)當(dāng)具有的身份。而在真正進(jìn)行服務(wù)調(diào)用的時(shí)候,客戶端要求服務(wù)提供相應(yīng)的憑證。而客戶端根據(jù)這個(gè)憑證和實(shí)現(xiàn)確定的身份進(jìn)行比較,從而確定當(dāng)前正在調(diào)用的服
3、務(wù)正是自己希望調(diào)用的那個(gè)。通過上面一節(jié)的介紹,我們已經(jīng)知道了客戶端具有多種形式的憑證類型,但是服務(wù)憑證具有兩種典型的類型:Windows憑證和X.509證書。服務(wù)憑證的類型決定了認(rèn)證方式,所以服務(wù)認(rèn)證通過Windows認(rèn)證或者對X.509證書的檢驗(yàn)來實(shí)現(xiàn)。而Windows認(rèn)證具有兩種具體的實(shí)現(xiàn),即Kerberos和NTLM。通過前面對Kerberos和NTLM的介紹,你應(yīng)該知道只有Kerberos支持雙向認(rèn)證,而NTLM則不能。因此,只有在基于域(Domain)的網(wǎng)絡(luò)環(huán)境中,基于Windows認(rèn)證的服務(wù)認(rèn)證才是可行的。而在工作組(WorkGroup)環(huán)境中,我們推薦使用基于證書
4、的服務(wù)認(rèn)證。服務(wù)認(rèn)證方式的選擇決定于客戶端認(rèn)證采用的方式,基本的策略是這樣的:如果采用Windows認(rèn)證的方式對客戶端實(shí)施認(rèn)證,服務(wù)認(rèn)證同樣采用Windows認(rèn)證?;赬.509證書的認(rèn)證在非Windows客戶端認(rèn)證下被采用。進(jìn)一步地,如果客戶端憑證類型為Windows,那么WCF采用執(zhí)行服務(wù)寄宿進(jìn)程的Windows帳號對應(yīng)的Windows憑證作為服務(wù)憑證。如果其他非Windows憑證作為客戶端憑證,你必須為服務(wù)顯式地指定一個(gè)X.509證書作為服務(wù)憑證。這也是為何在前面演示的實(shí)例中,當(dāng)NetTcpBinding采用Transport安全模式,客戶端憑證被設(shè)置成None時(shí),為何需
5、要為服務(wù)指定一個(gè)X.509證書作為服務(wù)憑證的原因。在WCF的應(yīng)用編程接口中,具有一個(gè)重要的服務(wù)行為ServiceCredentials。這個(gè)類并不簡單象它的名稱所表示的那樣用于進(jìn)行服務(wù)憑證的設(shè)置,實(shí)際上需要在服務(wù)端執(zhí)行的很多認(rèn)證、授權(quán)行為都是通過ServiceCredentials(或者ServicePointManager的RemoteCertificateValidationCallback回調(diào))來實(shí)現(xiàn)的。而在這里,我們暫時(shí)只關(guān)心如何通過ServiceCredentials為服務(wù)指定一個(gè)X.509證書作為服務(wù)憑證。關(guān)于這一點(diǎn),已經(jīng)在前面作過介紹了。如果服務(wù)采用基于X.509
6、證書作為服務(wù)憑證,客戶端對服務(wù)的認(rèn)證過程實(shí)際上分為兩個(gè)階段。第一個(gè)階段是驗(yàn)證證書的合法性,在默認(rèn)的情況下會采用ChainTrust認(rèn)證模式,不過可以通過終結(jié)點(diǎn)行為ClientCredentials(或者ServicePointManager的RemoteCertificateValidationCallback回調(diào))來設(shè)置不同的認(rèn)證模式。關(guān)于具體對服務(wù)證書認(rèn)證模式的設(shè)置在前面的實(shí)例演示(《TLS/SSL在WCF中的應(yīng)用[SSLoverTCP]》和《TLS/SSL在WCF中的應(yīng)用[HTTPS]》)中已經(jīng)有過介紹了。當(dāng)通過以第一階段的認(rèn)證之后,才會進(jìn)入第二階段的認(rèn)證,即通過比較服務(wù)
7、證書和事先確立的服務(wù)身份信息進(jìn)行對照進(jìn)而確定服務(wù)是否是客戶端試圖訪問的服務(wù),接下來討論關(guān)于服務(wù)身份的話題。二、服務(wù)身份(ServiceIdentity)我們知道終結(jié)點(diǎn)時(shí)WCF最為核心的概念,終結(jié)點(diǎn)通過類型ServiceEndpoint表示。終結(jié)點(diǎn)具有ABC三要素分別表示地址、綁定和契約,其中地址通過EndpointAddress表示。如果你對EndpointAddress有一定的了解,你應(yīng)該清楚該類具有一個(gè)只讀的Identity的屬性,對應(yīng)的類型為EndpointIdentity,相關(guān)定義如