WSE3.0构建Web服务安全(3):WSE3.0策略配置、证书、签名、与实例开发
生活随笔
收集整理的這篇文章主要介紹了
WSE3.0构建Web服务安全(3):WSE3.0策略配置、证书、签名、与实例开发
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
繼WSE3.0構(gòu)建Web服務(wù)安全(1):WSE3.0安全機(jī)制與實(shí)例開發(fā)和WSE3.0構(gòu)建Web服務(wù)安全(2):非對(duì)稱加密、公鑰、密鑰、證書、簽名的區(qū)別和聯(lián)系以及X.509 證書的獲得和管理之后,今天我們繼續(xù)WSE3.0構(gòu)建Web服務(wù)安全系列文章的第3節(jié):WSE3.0策略配置與實(shí)例開發(fā).本節(jié)主要講解如何通過WSE3.0策略配置工具實(shí)現(xiàn)Web服務(wù)安全,本在全文附帶代碼講解。本節(jié)結(jié)構(gòu)為1.WSE3.0策略工具介紹2.如何使用WSE3.0策略工具3.代碼實(shí)現(xiàn)與分析4.總結(jié)。最后附上代碼供大家下載。 通過上2節(jié)的介紹我們知道:WSE 3.0是和Web Service整合在一起。通過對(duì)Web Service服務(wù)消息模型的擴(kuò)展實(shí)現(xiàn)安全加密機(jī)制。 WSE 3.0中,客戶端請?jiān)L問Web服務(wù)是通過客戶端生成的一個(gè)Proxy類來完成。當(dāng)客戶端向服務(wù)端發(fā)送Web Service調(diào)用請求的時(shí)候,WSE 3.0擴(kuò)展框架會(huì)對(duì)消息進(jìn)行一些處理,包括過濾、加密、簽名等。而服務(wù)器端Web Service在收到客戶端的調(diào)用請求后,WSE 3.0擴(kuò)展框架同樣會(huì)先對(duì)SOAP消息進(jìn)行解密、簽名的驗(yàn)證等操作。如果合法則相應(yīng)用戶請求,否則就拋出服務(wù)不可用異常給客戶端。這些工作都是由WSE 3.0擴(kuò)展框架自動(dòng)完成解密、簽名的驗(yàn)證等操。 WSE 3.0提供的安全機(jī)制保證了Web Service的安全。同時(shí)實(shí)現(xiàn)安全的方式也有兩種,一種就是通過的WSE3.0策略工具根據(jù)應(yīng)用系統(tǒng)的安全規(guī)格給服務(wù)端和客戶端設(shè)置相應(yīng)的安全策略。其次就是用代碼實(shí)現(xiàn)具體的安全策略相同的功能。第一種方式方便快捷,通過簡單的設(shè)置即可完成Web服務(wù)的安全。后者用戶可以定義更具體的代碼來擴(kuò)展自己的安全策略,相對(duì)來說需要自己寫策略代碼。不論采用那種方式,我們都可以利用WSE 3.0提供的安全機(jī)制守衛(wèi)我們的Web服務(wù)。
????? 另外WSE 3.0也提供了其他的一些特性,例如多宿主托管Web服務(wù)、用戶自定義的安全斷言、對(duì)消息傳輸優(yōu)化機(jī)制MTOM的支持、使用TCP傳輸控制協(xié)議傳遞SOAP消息等。我們也可以根據(jù)實(shí)際的系統(tǒng)需求來利用WSE 3.0提供的新特性,優(yōu)化我們的系統(tǒng)。第一節(jié)中我們也提到在 Web Serivice項(xiàng)目中啟用 WSE 3.0 的一個(gè)重要原因,就是要利用它的策略管道擴(kuò)展性模型。因?yàn)閃SEWSE 3.0 使您能夠插入對(duì)進(jìn)入和離開終結(jié)點(diǎn)的 SOAP 消息執(zhí)行預(yù)處理和后續(xù)處理的篩選器,它提供的功能可以創(chuàng)建能夠與WSEWSE 3.0 提供的現(xiàn)有聲明性安全策略相結(jié)合的自定義聲明性策略。下面我們來介紹一下WSE3.0配置工具,以及如何配置安全策略。 【1】WSE3.0策略工具介紹 首先我們來介紹一下這個(gè)工具。WSE3.0具體的安裝細(xì)節(jié)已經(jīng)在第一節(jié)WSE3.0構(gòu)建Web服務(wù)安全(1):WSE3.0安全機(jī)制與實(shí)例開發(fā)中做了介紹。當(dāng)我們安裝完畢會(huì)在新建的Web Service Vsual Studio 2005 項(xiàng)目右鍵菜單看到WSE 3.0設(shè)置。打開以后會(huì)出現(xiàn)配置工具的具體界面。如圖: 它包括的通用、安全、路由、策略、令牌問題、調(diào)試、消息7個(gè)選項(xiàng)卡。 1)通用選顯卡包括是否在項(xiàng)目里支持WSE3.0和WSE3.0 SOAP消息工廠。 2)安全選顯卡可以設(shè)置用戶令牌管理類庫,以及證書和消息的有效時(shí)間。 3)路由選項(xiàng)卡可以設(shè)置消息中介者SoapHttpRouter對(duì)進(jìn)入和傳出的消息加密。 4)策略選項(xiàng)卡可以更具安全需求對(duì)服務(wù)端和客戶端設(shè)置特定的安全策略,策略會(huì)存儲(chǔ)在相應(yīng)的安全策略文件里。 5)令牌問題選項(xiàng)卡可以設(shè)置令牌的TTL有效存活時(shí)間。以及是否使用安全上下文令牌。 6)調(diào)試選項(xiàng)卡可以設(shè)置項(xiàng)目的具體調(diào)試的細(xì)節(jié)。消息輸入和輸出的的文件以及是否舒服錯(cuò)誤信息等。 7)消息選項(xiàng)卡主要是對(duì)消息優(yōu)化傳輸機(jī)制MTOM的一些設(shè)置。
【2】如何使用WSE3.0策略配置工具 以上簡單介紹了WSE3.0策略配置工具,下面我們來具體介紹主要選項(xiàng)的具體使用過程。 1)如果用戶選擇了項(xiàng)目里支持WSE3.0和WSE3.0 SOAP消息工廠。 會(huì)在相應(yīng)的配置WebConfig文件里自動(dòng)添加一下信息。 <section name="microsoft.web.services3" type="Microsoft.Web.Services3.Configuration.WebServicesConfiguration, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
???<webServices>
???<soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
??</webServices>
?</system.web> 配置文件更新完畢代表剛才的設(shè)置成功。 2)用戶可以在這里設(shè)置安全選顯卡可以設(shè)置用戶令牌管理類庫,以及證書和消息的有效時(shí)間。如圖 這里設(shè)置的UsernameTokenManager類庫為我們自己定義的類庫,設(shè)置時(shí)要正確填寫DLL的名稱、命名空間、類的信息。完成以后會(huì)在配置文件里生成代碼。 ??? <security>
????? <securityTokenManager>
??????? <add type="MyUsernameTokenManager.MyUsernameTokenManager, UsernameTokenManagerClassLib" namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" localName="UsernameToken" />
????? </securityTokenManager>
??? </security> 3)路由選項(xiàng)卡可以設(shè)置消息中介者SoapHttpRouter對(duì)進(jìn)入和傳出的消息加密,這里就不做詳細(xì)的介紹,具體大家可以參考MSDN。 4)策略選項(xiàng)卡可以更具安全需求對(duì)服務(wù)端和客戶端設(shè)置特定的安全策略。用戶可以決定是否使用策略和策略的管理。 服務(wù)端和客戶端添加策略的文件類似,當(dāng)用戶選擇添加策略文件的時(shí)候,會(huì)啟動(dòng)一個(gè)策略配置向?qū)?#xff0c;你輸入策略名稱后,就可以繼續(xù)下一步。如圖 用戶可以選擇可以給客戶端還是服務(wù)端進(jìn)行策略設(shè)置,客戶端認(rèn)證方法包括4種。 A.Anonymous 匿名訪問,不需要提供用戶名和密碼。服務(wù)器默認(rèn)客戶端請求已經(jīng)進(jìn)行加密。
B.Username 需要包含用戶名和密碼的Usernametoken的安全令牌。
C.Certificate 需要提供服務(wù)端認(rèn)證的X.509證書。
D.Windows 需要提供服務(wù)端認(rèn)證的KerberosT令牌,此方式不屬于WS-*安全協(xié)議的范疇,使用Windows Kerberos 認(rèn)證機(jī)制。 如果在向?qū)е羞x擇消息傳輸保護(hù),還需要設(shè)置安全需求比如是否支持WS-*安全協(xié)議1.1擴(kuò)展、簽名、加密等策略,如圖: A.None :SOAP消息應(yīng)當(dāng)在傳輸層依賴安全套接層協(xié)議(SSL,Security Socket Layer)提供保護(hù),WSE在傳輸層不提供保護(hù)。
B.Sign-Only :客戶端需要對(duì)SOAP消息簽名。保證消息的唯一性。
C.Sign and Encrypt:WSE對(duì)SOAP消息簽名,且對(duì)SOAP消息體加密,來保證消息安全。
D.Sign, Encrypt, Encrypt Signature:WSE對(duì) SOAP消息必須簽名、消息體簽名加密?、對(duì)簽名進(jìn)行加密。 使用匿名方式生成的策略是 ? <policy name="ServerPolicy">
??? <usernameOverTransportSecurity />
??? <requireActionHeader />
? </policy> 表示只依賴于傳輸層安全機(jī)制,但是這個(gè)安全級(jí)別比較低。消息容易被截獲和破譯。 5)令牌問題選項(xiàng)卡可以設(shè)置令牌的TTL有效存活時(shí)間。以及是否使用安全上下文令牌。 令牌生存期為30秒,設(shè)置后對(duì)應(yīng)的配置文件節(jié)點(diǎn)為 ??? <tokenIssuer>
????? <ttlInSeconds value="30" />
??? </tokenIssuer> 6)調(diào)試選項(xiàng)卡可以設(shè)置項(xiàng)目的具體調(diào)試的細(xì)節(jié)。消息輸入和輸出的的文件以及是否舒服錯(cuò)誤信息等。 具體的設(shè)置后生成的配置節(jié)點(diǎn)如下: ??? <diagnostics>
????? <trace enabled="true" input="InputTrace.webinfo" output="OutputTrace.webinfo" />
????? <detailedErrors enabled="true" />
??? </diagnostics> 這樣可以輸入錯(cuò)誤消息,便于調(diào)試。 7)消息選項(xiàng)卡主要是對(duì)消息優(yōu)化傳輸機(jī)制MTOM的一些設(shè)置。 如果使用消息優(yōu)化機(jī)制,可以設(shè)置相應(yīng)的選項(xiàng), ??? <messaging>
????? <mtom clientMode="On" serverMode="always" />
??? </messaging> 這樣表示一直使用消息優(yōu)化傳輸機(jī)制。 【3】代碼實(shí)現(xiàn)與分析 通過上面對(duì)WSE3.0配置工具的消息介紹,現(xiàn)在我們來使用WSE3.0配置工具來進(jìn)行簡單的項(xiàng)目配置。 在介紹代碼實(shí)現(xiàn)以前,先要強(qiáng)調(diào)一點(diǎn),WSE3.0安全機(jī)制的工作原理,比如簽名。我們在使用策略工具進(jìn)行設(shè)置,對(duì)消息消息簽名,會(huì)要求你提供一個(gè)X509證書,也就是服務(wù)端認(rèn)證的公鑰。來對(duì)消息加密。服務(wù)端配置的策略的同時(shí)會(huì)在服務(wù)端提供對(duì)應(yīng)的私鑰進(jìn)行解密,我們要做的就是提供認(rèn)證的證書和設(shè)置安全策略文件。加密和解密驗(yàn)證的過程由WSE3.0來為我們完成。下面我們還是以上次的代碼的基礎(chǔ)上,來演示我們的具體WSE3.0策略工具的配置過程。使用證書的加密和解密的代碼我會(huì)給出講解,但是就不會(huì)給具體的實(shí)現(xiàn)了。(XP無法安裝證書服務(wù)機(jī)構(gòu),自己制作的證書需要認(rèn)證通過后,才能使用)幾種方式的配置有類似之處,大家有興趣可以查閱MSDN的資料。或者留言交流。 1)服務(wù)端:服務(wù)器端策略配置使用Username 方式,需要客戶端提供用戶名和密碼的Usernametoken的安全令牌。具體策略文件對(duì)應(yīng)節(jié)點(diǎn)如下: ? <policy name="ServerPolicy">
??? <usernameOverTransportSecurity />
??? <requireActionHeader />
? </policy> 服務(wù)端代碼需要做相應(yīng)的更改,添加使用策略的屬性標(biāo)識(shí)Microsoft.Web.Services3.Policy("ServerPolicy")]。具體代碼如下: Code
[Microsoft.Web.Services3.Policy("ServerPolicy")]
public?class?Service?:?System.Web.Services.WebService
{
????public?Service?()?{
????????//Uncomment?the?following?line?if?using?designed?components?
????????//InitializeComponent();?
????}
????[WebMethod]
????public?string?HelloWorld()
????{
????????return?"Hello?Guys,?Frank?Xu?Lei.is?testing?WSE3.0?Setting?Policy";
????}
????
}
2)客戶端: 客戶端與服務(wù)端配置相對(duì)應(yīng)的安全策略。即提供用戶名和密碼的Usernametoken的安全令牌。策略相同: ? <policy name="ClientPolicy">
??? <usernameOverTransportSecurity />
??? <requireActionHeader />
? </policy> 客戶端的測試代碼做做了相應(yīng)更新。?需要設(shè)置代理策略,語句是serviceProxy.SetPolicy("ClientPolicy");具體代碼如下 Code
?//?創(chuàng)建Web?service?proxy的實(shí)例?
????????????ServiceWse?serviceProxy?=?new?ServiceWse();
????????????//通過UsernameToken類的實(shí)例添加用戶名與口令。
????????????UsernameToken?token?=?new?UsernameToken("FrankXu",?"123456789",?PasswordOption.SendPlainText);
????????????//MessageSignature?_messageSignature?=?new?MessageSignature(token);
????????????//_messageSignature.SigningKey
????????????//?設(shè)置用戶令牌到服務(wù)代理
????????????serviceProxy.SetClientCredential(token);
????????????//?代理設(shè)置策略
????????????serviceProxy.SetPolicy("ClientPolicy");
????????????//調(diào)用服務(wù)方法
????????????string?result?=?serviceProxy.HelloWorld();
????????????try
????????????{
????????????????Console.WriteLine(result);//打印結(jié)果
????????????????Console.WriteLine("Calling?{0}",?result);
????????????}
????????????catch?(Exception?ex)
????????????{
????????????????Console.WriteLine(ex.Message);
????????????}
????????????//釋放對(duì)象資源
????????????if(serviceProxy?!=?null)
????????????serviceProxy.Dispose();
????????????
????????????//?Success!
????????????Console.WriteLine("Web?Service?called?successfully");
????????????//For?debug
????????????Console.WriteLine("Press?any?key?to?continue");
????????????Console.ReadLine();
這個(gè)表示服務(wù)端和客戶端使用了相同的安全策略。客戶端按照策略把用戶名和密碼封裝到UsernameToken里,添加到Soap消息里,發(fā)送給服務(wù)端。服務(wù)端根據(jù)策略解析Soap消。反序列化UsernameToken。然后進(jìn)行用戶名和密碼的安全驗(yàn)證。 3)運(yùn)行演示: 【4】總結(jié) 另外如果用戶服務(wù)安全使用簽名,加密,加密使用到證書等安全策略,可以使用WSE3.0配置工具設(shè)置具體策略到wse3policyCache.config文件中,來實(shí)現(xiàn)系統(tǒng)的安全。此外也可以使用WSE3.0提供的類庫來利用代碼實(shí)現(xiàn)。代碼如下: ??????????? //如下代碼實(shí)現(xiàn)了和 wse3policycache.config一樣的策略功能
??????????? UsernameForCertificateAssertion assertion = new UsernameForCertificateAssertion(); ??????????? //設(shè)置 X509證書到安全斷言.
??????????? assertion.X509TokenProvider = new X509TokenProvider(StoreLocation.CurrentUser,
??????????????????????????????????????????????????????????????? StoreName.AddressBook,
??????????????????????????????????????????????????????????????? "CN=WSE2QuickStartServer",//證書
??????????????????????????????????????????????????????????????? X509FindType.FindBySubjectDistinguishedName);
??????????? //設(shè)置簽名選項(xiàng)。
??????????? assertion.Protection.Request.SignatureOptions = SignatureOptions.IncludeAddressing |
???????????????????????????????????????????????? SignatureOptions.IncludeTimestamp |
???????????????????????????????????????????????? SignatureOptions.IncludeSoapBody;
??????????? //加密消息主體
??????????? assertion.Protection.Request.EncryptBody = true; 以上就是對(duì)WSE3.0配置工具的使用過程的詳細(xì)介紹。我們了解了整合WSE3.0配置工具相關(guān)的概念和使用方法,以及使用WSE3.0配置工具對(duì)具體的項(xiàng)目進(jìn)行安全設(shè)置的實(shí)現(xiàn)過程。希望通過本文的介紹,大家能對(duì)WSE3.0實(shí)現(xiàn)Web服務(wù)的安全有個(gè)新的了解。基礎(chǔ)知識(shí)和概念請參考本系列的前兩節(jié)。在調(diào)試WSE3.0安全項(xiàng)目的時(shí)候遇到的錯(cuò)誤以及解決辦法我也放到博客的開發(fā)常見錯(cuò)誤解決系列文章里。最后放上本文的實(shí)現(xiàn)代碼/Files/frank_xl/WSE3UserNameTokenWithPolicyCodedByFrankXuLei.rar,供大家參考。因?yàn)樽罱容^忙,所以本節(jié)文章準(zhǔn)備時(shí)間花費(fèi)了一周,希望能對(duì)大家的學(xué)習(xí)有點(diǎn)幫助,也歡迎留言交流。謝謝~~
????? 另外WSE 3.0也提供了其他的一些特性,例如多宿主托管Web服務(wù)、用戶自定義的安全斷言、對(duì)消息傳輸優(yōu)化機(jī)制MTOM的支持、使用TCP傳輸控制協(xié)議傳遞SOAP消息等。我們也可以根據(jù)實(shí)際的系統(tǒng)需求來利用WSE 3.0提供的新特性,優(yōu)化我們的系統(tǒng)。第一節(jié)中我們也提到在 Web Serivice項(xiàng)目中啟用 WSE 3.0 的一個(gè)重要原因,就是要利用它的策略管道擴(kuò)展性模型。因?yàn)閃SEWSE 3.0 使您能夠插入對(duì)進(jìn)入和離開終結(jié)點(diǎn)的 SOAP 消息執(zhí)行預(yù)處理和后續(xù)處理的篩選器,它提供的功能可以創(chuàng)建能夠與WSEWSE 3.0 提供的現(xiàn)有聲明性安全策略相結(jié)合的自定義聲明性策略。下面我們來介紹一下WSE3.0配置工具,以及如何配置安全策略。 【1】WSE3.0策略工具介紹 首先我們來介紹一下這個(gè)工具。WSE3.0具體的安裝細(xì)節(jié)已經(jīng)在第一節(jié)WSE3.0構(gòu)建Web服務(wù)安全(1):WSE3.0安全機(jī)制與實(shí)例開發(fā)中做了介紹。當(dāng)我們安裝完畢會(huì)在新建的Web Service Vsual Studio 2005 項(xiàng)目右鍵菜單看到WSE 3.0設(shè)置。打開以后會(huì)出現(xiàn)配置工具的具體界面。如圖: 它包括的通用、安全、路由、策略、令牌問題、調(diào)試、消息7個(gè)選項(xiàng)卡。 1)通用選顯卡包括是否在項(xiàng)目里支持WSE3.0和WSE3.0 SOAP消息工廠。 2)安全選顯卡可以設(shè)置用戶令牌管理類庫,以及證書和消息的有效時(shí)間。 3)路由選項(xiàng)卡可以設(shè)置消息中介者SoapHttpRouter對(duì)進(jìn)入和傳出的消息加密。 4)策略選項(xiàng)卡可以更具安全需求對(duì)服務(wù)端和客戶端設(shè)置特定的安全策略,策略會(huì)存儲(chǔ)在相應(yīng)的安全策略文件里。 5)令牌問題選項(xiàng)卡可以設(shè)置令牌的TTL有效存活時(shí)間。以及是否使用安全上下文令牌。 6)調(diào)試選項(xiàng)卡可以設(shè)置項(xiàng)目的具體調(diào)試的細(xì)節(jié)。消息輸入和輸出的的文件以及是否舒服錯(cuò)誤信息等。 7)消息選項(xiàng)卡主要是對(duì)消息優(yōu)化傳輸機(jī)制MTOM的一些設(shè)置。
【2】如何使用WSE3.0策略配置工具 以上簡單介紹了WSE3.0策略配置工具,下面我們來具體介紹主要選項(xiàng)的具體使用過程。 1)如果用戶選擇了項(xiàng)目里支持WSE3.0和WSE3.0 SOAP消息工廠。 會(huì)在相應(yīng)的配置WebConfig文件里自動(dòng)添加一下信息。 <section name="microsoft.web.services3" type="Microsoft.Web.Services3.Configuration.WebServicesConfiguration, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
???<webServices>
???<soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
??</webServices>
?</system.web> 配置文件更新完畢代表剛才的設(shè)置成功。 2)用戶可以在這里設(shè)置安全選顯卡可以設(shè)置用戶令牌管理類庫,以及證書和消息的有效時(shí)間。如圖 這里設(shè)置的UsernameTokenManager類庫為我們自己定義的類庫,設(shè)置時(shí)要正確填寫DLL的名稱、命名空間、類的信息。完成以后會(huì)在配置文件里生成代碼。 ??? <security>
????? <securityTokenManager>
??????? <add type="MyUsernameTokenManager.MyUsernameTokenManager, UsernameTokenManagerClassLib" namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" localName="UsernameToken" />
????? </securityTokenManager>
??? </security> 3)路由選項(xiàng)卡可以設(shè)置消息中介者SoapHttpRouter對(duì)進(jìn)入和傳出的消息加密,這里就不做詳細(xì)的介紹,具體大家可以參考MSDN。 4)策略選項(xiàng)卡可以更具安全需求對(duì)服務(wù)端和客戶端設(shè)置特定的安全策略。用戶可以決定是否使用策略和策略的管理。 服務(wù)端和客戶端添加策略的文件類似,當(dāng)用戶選擇添加策略文件的時(shí)候,會(huì)啟動(dòng)一個(gè)策略配置向?qū)?#xff0c;你輸入策略名稱后,就可以繼續(xù)下一步。如圖 用戶可以選擇可以給客戶端還是服務(wù)端進(jìn)行策略設(shè)置,客戶端認(rèn)證方法包括4種。 A.Anonymous 匿名訪問,不需要提供用戶名和密碼。服務(wù)器默認(rèn)客戶端請求已經(jīng)進(jìn)行加密。
B.Username 需要包含用戶名和密碼的Usernametoken的安全令牌。
C.Certificate 需要提供服務(wù)端認(rèn)證的X.509證書。
D.Windows 需要提供服務(wù)端認(rèn)證的KerberosT令牌,此方式不屬于WS-*安全協(xié)議的范疇,使用Windows Kerberos 認(rèn)證機(jī)制。 如果在向?qū)е羞x擇消息傳輸保護(hù),還需要設(shè)置安全需求比如是否支持WS-*安全協(xié)議1.1擴(kuò)展、簽名、加密等策略,如圖: A.None :SOAP消息應(yīng)當(dāng)在傳輸層依賴安全套接層協(xié)議(SSL,Security Socket Layer)提供保護(hù),WSE在傳輸層不提供保護(hù)。
B.Sign-Only :客戶端需要對(duì)SOAP消息簽名。保證消息的唯一性。
C.Sign and Encrypt:WSE對(duì)SOAP消息簽名,且對(duì)SOAP消息體加密,來保證消息安全。
D.Sign, Encrypt, Encrypt Signature:WSE對(duì) SOAP消息必須簽名、消息體簽名加密?、對(duì)簽名進(jìn)行加密。 使用匿名方式生成的策略是 ? <policy name="ServerPolicy">
??? <usernameOverTransportSecurity />
??? <requireActionHeader />
? </policy> 表示只依賴于傳輸層安全機(jī)制,但是這個(gè)安全級(jí)別比較低。消息容易被截獲和破譯。 5)令牌問題選項(xiàng)卡可以設(shè)置令牌的TTL有效存活時(shí)間。以及是否使用安全上下文令牌。 令牌生存期為30秒,設(shè)置后對(duì)應(yīng)的配置文件節(jié)點(diǎn)為 ??? <tokenIssuer>
????? <ttlInSeconds value="30" />
??? </tokenIssuer> 6)調(diào)試選項(xiàng)卡可以設(shè)置項(xiàng)目的具體調(diào)試的細(xì)節(jié)。消息輸入和輸出的的文件以及是否舒服錯(cuò)誤信息等。 具體的設(shè)置后生成的配置節(jié)點(diǎn)如下: ??? <diagnostics>
????? <trace enabled="true" input="InputTrace.webinfo" output="OutputTrace.webinfo" />
????? <detailedErrors enabled="true" />
??? </diagnostics> 這樣可以輸入錯(cuò)誤消息,便于調(diào)試。 7)消息選項(xiàng)卡主要是對(duì)消息優(yōu)化傳輸機(jī)制MTOM的一些設(shè)置。 如果使用消息優(yōu)化機(jī)制,可以設(shè)置相應(yīng)的選項(xiàng), ??? <messaging>
????? <mtom clientMode="On" serverMode="always" />
??? </messaging> 這樣表示一直使用消息優(yōu)化傳輸機(jī)制。 【3】代碼實(shí)現(xiàn)與分析 通過上面對(duì)WSE3.0配置工具的消息介紹,現(xiàn)在我們來使用WSE3.0配置工具來進(jìn)行簡單的項(xiàng)目配置。 在介紹代碼實(shí)現(xiàn)以前,先要強(qiáng)調(diào)一點(diǎn),WSE3.0安全機(jī)制的工作原理,比如簽名。我們在使用策略工具進(jìn)行設(shè)置,對(duì)消息消息簽名,會(huì)要求你提供一個(gè)X509證書,也就是服務(wù)端認(rèn)證的公鑰。來對(duì)消息加密。服務(wù)端配置的策略的同時(shí)會(huì)在服務(wù)端提供對(duì)應(yīng)的私鑰進(jìn)行解密,我們要做的就是提供認(rèn)證的證書和設(shè)置安全策略文件。加密和解密驗(yàn)證的過程由WSE3.0來為我們完成。下面我們還是以上次的代碼的基礎(chǔ)上,來演示我們的具體WSE3.0策略工具的配置過程。使用證書的加密和解密的代碼我會(huì)給出講解,但是就不會(huì)給具體的實(shí)現(xiàn)了。(XP無法安裝證書服務(wù)機(jī)構(gòu),自己制作的證書需要認(rèn)證通過后,才能使用)幾種方式的配置有類似之處,大家有興趣可以查閱MSDN的資料。或者留言交流。 1)服務(wù)端:服務(wù)器端策略配置使用Username 方式,需要客戶端提供用戶名和密碼的Usernametoken的安全令牌。具體策略文件對(duì)應(yīng)節(jié)點(diǎn)如下: ? <policy name="ServerPolicy">
??? <usernameOverTransportSecurity />
??? <requireActionHeader />
? </policy> 服務(wù)端代碼需要做相應(yīng)的更改,添加使用策略的屬性標(biāo)識(shí)Microsoft.Web.Services3.Policy("ServerPolicy")]。具體代碼如下: Code
[Microsoft.Web.Services3.Policy("ServerPolicy")]
public?class?Service?:?System.Web.Services.WebService
{
????public?Service?()?{
????????//Uncomment?the?following?line?if?using?designed?components?
????????//InitializeComponent();?
????}
????[WebMethod]
????public?string?HelloWorld()
????{
????????return?"Hello?Guys,?Frank?Xu?Lei.is?testing?WSE3.0?Setting?Policy";
????}
????
}
2)客戶端: 客戶端與服務(wù)端配置相對(duì)應(yīng)的安全策略。即提供用戶名和密碼的Usernametoken的安全令牌。策略相同: ? <policy name="ClientPolicy">
??? <usernameOverTransportSecurity />
??? <requireActionHeader />
? </policy> 客戶端的測試代碼做做了相應(yīng)更新。?需要設(shè)置代理策略,語句是serviceProxy.SetPolicy("ClientPolicy");具體代碼如下 Code
?//?創(chuàng)建Web?service?proxy的實(shí)例?
????????????ServiceWse?serviceProxy?=?new?ServiceWse();
????????????//通過UsernameToken類的實(shí)例添加用戶名與口令。
????????????UsernameToken?token?=?new?UsernameToken("FrankXu",?"123456789",?PasswordOption.SendPlainText);
????????????//MessageSignature?_messageSignature?=?new?MessageSignature(token);
????????????//_messageSignature.SigningKey
????????????//?設(shè)置用戶令牌到服務(wù)代理
????????????serviceProxy.SetClientCredential(token);
????????????//?代理設(shè)置策略
????????????serviceProxy.SetPolicy("ClientPolicy");
????????????//調(diào)用服務(wù)方法
????????????string?result?=?serviceProxy.HelloWorld();
????????????try
????????????{
????????????????Console.WriteLine(result);//打印結(jié)果
????????????????Console.WriteLine("Calling?{0}",?result);
????????????}
????????????catch?(Exception?ex)
????????????{
????????????????Console.WriteLine(ex.Message);
????????????}
????????????//釋放對(duì)象資源
????????????if(serviceProxy?!=?null)
????????????serviceProxy.Dispose();
????????????
????????????//?Success!
????????????Console.WriteLine("Web?Service?called?successfully");
????????????//For?debug
????????????Console.WriteLine("Press?any?key?to?continue");
????????????Console.ReadLine();
這個(gè)表示服務(wù)端和客戶端使用了相同的安全策略。客戶端按照策略把用戶名和密碼封裝到UsernameToken里,添加到Soap消息里,發(fā)送給服務(wù)端。服務(wù)端根據(jù)策略解析Soap消。反序列化UsernameToken。然后進(jìn)行用戶名和密碼的安全驗(yàn)證。 3)運(yùn)行演示: 【4】總結(jié) 另外如果用戶服務(wù)安全使用簽名,加密,加密使用到證書等安全策略,可以使用WSE3.0配置工具設(shè)置具體策略到wse3policyCache.config文件中,來實(shí)現(xiàn)系統(tǒng)的安全。此外也可以使用WSE3.0提供的類庫來利用代碼實(shí)現(xiàn)。代碼如下: ??????????? //如下代碼實(shí)現(xiàn)了和 wse3policycache.config一樣的策略功能
??????????? UsernameForCertificateAssertion assertion = new UsernameForCertificateAssertion(); ??????????? //設(shè)置 X509證書到安全斷言.
??????????? assertion.X509TokenProvider = new X509TokenProvider(StoreLocation.CurrentUser,
??????????????????????????????????????????????????????????????? StoreName.AddressBook,
??????????????????????????????????????????????????????????????? "CN=WSE2QuickStartServer",//證書
??????????????????????????????????????????????????????????????? X509FindType.FindBySubjectDistinguishedName);
??????????? //設(shè)置簽名選項(xiàng)。
??????????? assertion.Protection.Request.SignatureOptions = SignatureOptions.IncludeAddressing |
???????????????????????????????????????????????? SignatureOptions.IncludeTimestamp |
???????????????????????????????????????????????? SignatureOptions.IncludeSoapBody;
??????????? //加密消息主體
??????????? assertion.Protection.Request.EncryptBody = true; 以上就是對(duì)WSE3.0配置工具的使用過程的詳細(xì)介紹。我們了解了整合WSE3.0配置工具相關(guān)的概念和使用方法,以及使用WSE3.0配置工具對(duì)具體的項(xiàng)目進(jìn)行安全設(shè)置的實(shí)現(xiàn)過程。希望通過本文的介紹,大家能對(duì)WSE3.0實(shí)現(xiàn)Web服務(wù)的安全有個(gè)新的了解。基礎(chǔ)知識(shí)和概念請參考本系列的前兩節(jié)。在調(diào)試WSE3.0安全項(xiàng)目的時(shí)候遇到的錯(cuò)誤以及解決辦法我也放到博客的開發(fā)常見錯(cuò)誤解決系列文章里。最后放上本文的實(shí)現(xiàn)代碼/Files/frank_xl/WSE3UserNameTokenWithPolicyCodedByFrankXuLei.rar,供大家參考。因?yàn)樽罱容^忙,所以本節(jié)文章準(zhǔn)備時(shí)間花費(fèi)了一周,希望能對(duì)大家的學(xué)習(xí)有點(diǎn)幫助,也歡迎留言交流。謝謝~~
轉(zhuǎn)載于:https://blog.51cto.com/frankxulei/320501
總結(jié)
以上是生活随笔為你收集整理的WSE3.0构建Web服务安全(3):WSE3.0策略配置、证书、签名、与实例开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 配置ASA 7.x to Router
- 下一篇: 人之患在好为人师