鄭州鐵路職業(yè)技術(shù)學(xué)院 李 咚
基于WSE的Web服務(wù)身份驗(yàn)證研究與實(shí)現(xiàn)
鄭州鐵路職業(yè)技術(shù)學(xué)院 李 咚
Web服務(wù)(Web Services)作為分布式計(jì)算模型,以其良好的擴(kuò)展性、松耦合性等特點(diǎn)在電子商務(wù)、政務(wù)等方面都得到了廣泛應(yīng)用。由于Web服務(wù)面臨著信息丟失、被竊聽、被篡改等安全性風(fēng)險(xiǎn),如何在Web服務(wù)中實(shí)現(xiàn)身份驗(yàn)證、授權(quán)、機(jī)密性、完整性以及不可抵賴性等安全措施,是系統(tǒng)應(yīng)用的重要保證。其中,身份驗(yàn)證是Web服務(wù)安全控制的基礎(chǔ),同時(shí)也決定了后續(xù)操作的安全性。Web服務(wù)的身份驗(yàn)證已經(jīng)成為網(wǎng)絡(luò)安全研究中的一個(gè)重要領(lǐng)域。
Web服務(wù)構(gòu)建在一組以XML為基礎(chǔ)的標(biāo)準(zhǔn)協(xié)議之上,是一種自包含、自描述、組件化的應(yīng)用程序。Web服務(wù)作為一種嶄新的分布式計(jì)算模型,是Web上數(shù)據(jù)和應(yīng)用集成的有效機(jī)制,也是網(wǎng)格和云計(jì)算等新興計(jì)算技術(shù)的首選實(shí)現(xiàn)方式。Web服務(wù)具有平臺(tái)無(wú)關(guān)性、動(dòng)態(tài)性、開放性和松散耦合的特征,這給企業(yè)應(yīng)用集成帶來(lái)極大的便利,同時(shí)也使其自身面臨許多獨(dú)特的安全問題。Web服務(wù)的安全性對(duì)其應(yīng)用前景產(chǎn)生至關(guān)重要的影響,也是目前Web服務(wù)并未進(jìn)入大規(guī)模應(yīng)用階段的主要原因之一。
1.Web服務(wù)簡(jiǎn)介。Web服務(wù)是一種通過(guò)網(wǎng)絡(luò)進(jìn)行發(fā)布、發(fā)現(xiàn)和調(diào)用的服務(wù)器端軟件組件。Web服務(wù)的實(shí)現(xiàn)依賴于一系列的標(biāo)準(zhǔn)協(xié)議或規(guī)范,其上層核心標(biāo)準(zhǔn)基于XML,借助WSDL和UDDI進(jìn)行描述、發(fā)布與發(fā)現(xiàn),使用SOAP進(jìn)行訪問,并通過(guò)HTTP等進(jìn)行傳輸,具有優(yōu)異的松耦合性、跨平臺(tái)性等特征,為其在異構(gòu)平臺(tái)上進(jìn)行系統(tǒng)的集成與交互提供了充分的保證。
2.Web服務(wù)的安全機(jī)制。Web服務(wù)的安全機(jī)制目前主要通過(guò)傳輸層安全和消息層安全加以解決?;趥鬏攲拥陌踩珯C(jī)制通過(guò)安全傳輸協(xié)議(SSL)、防火墻以及限制IP地址等實(shí)現(xiàn)點(diǎn)到點(diǎn)的安全性保障,但是無(wú)法提供應(yīng)用層中間節(jié)點(diǎn)參與Web服務(wù)時(shí)的數(shù)據(jù)安全保障?;谙拥陌踩珯C(jī)制通過(guò)對(duì)SOAP消息頭的擴(kuò)展添加安全元素,整合已成熟的安全技術(shù)對(duì)SOAP消息進(jìn)行簽名和加密,在應(yīng)用層上實(shí)現(xiàn)Web服務(wù)的細(xì)粒度保護(hù)和端到端的安全傳輸需求。
3.Web服務(wù)的身份驗(yàn)證。Web服務(wù)的身份驗(yàn)證是消息發(fā)送方將身份憑證傳遞給接收者來(lái)證明自己身份的過(guò)程。常用的身份驗(yàn)證方式有以下幾種。
(1)基本身份驗(yàn)證??蛻舳耸褂妹魑模˙ase64編碼)直接傳送用戶名和密碼在服務(wù)端進(jìn)行驗(yàn)證?;旧矸蒡?yàn)證與SSL結(jié)合可以實(shí)現(xiàn)在傳輸層的安全傳輸。
(2)摘要身份驗(yàn)證。在基本身份驗(yàn)證的基礎(chǔ)上將驗(yàn)證信息散列后傳輸。攻擊者無(wú)法根據(jù)散列值破解原始用戶名和密碼。
(3)集成Windows身份驗(yàn)證。主要用于Intranet方案,使用NTLM或Kerberos。客戶端屬于服務(wù)器所在的域或托管域,如果憑據(jù)能與有效賬戶匹配,客戶端獲得Web服務(wù)授權(quán)。
(4)客戶證書。要求在服務(wù)器和客戶端上有從受信任的第三方獲取的相應(yīng)證書,客戶端必須憑有效的證書才能進(jìn)行Web服務(wù),具有較高的安全保障。
(5)自定義驗(yàn)證。采用自定義的接口驗(yàn)證用戶身份。這種驗(yàn)證方式靈活,服務(wù)器可以定義各種驗(yàn)證所需要的接口和算法,如基于SOAP header的驗(yàn)證方式。
1.WS-Security規(guī)范。WS-Security規(guī)范是IBM、Microsoft等公司聯(lián)合開發(fā)的Web服務(wù)安全規(guī)范。WS-Security規(guī)范并未提出新的加密算法或安全模型,只是對(duì)SOAP協(xié)議的擴(kuò)展,在消息報(bào)頭中定義了安全元素<security>及其子元素來(lái)提供身份驗(yàn)證、消息完整性、機(jī)密性的安全保護(hù),使應(yīng)用程序達(dá)到構(gòu)建安全的SOAP消息交換的目標(biāo)。
2.WSE架構(gòu)及安全斷言。WSE(Web Services Enhancements)是微軟發(fā)布的在.NET框架下用來(lái)實(shí)現(xiàn)符合WS-Security規(guī)范的開發(fā)工具包,其體系架構(gòu)基于策略(Policy)和安全管道。管道用策略來(lái)創(chuàng)建,策略由有序的斷言組成。每個(gè)斷言定義一個(gè)對(duì)Web服務(wù)的要求,由斷言生成的輸入、輸出篩選器對(duì)進(jìn)出結(jié)點(diǎn)的SOAP消息進(jìn)行截獲和處理,執(zhí)行對(duì)Web服務(wù)的安全要求。目前的WSE3.0版本提供了6種安全斷言,用戶可以根據(jù)以下3種不同的場(chǎng)景選擇適合的身份驗(yàn)證方式。
(1)用戶名/密碼場(chǎng)景。Username over Transport Assertion提供客戶端簡(jiǎn)單的用戶名和密碼驗(yàn)證,需要依賴安全傳輸層來(lái)保障消息的安全。
Username for Certificate Assertion要求服務(wù)器配置自己的X.509證書,客戶端配置用戶名/密碼憑據(jù)和服務(wù)器的X.509證書(僅公鑰),可以保證端到端的安全身份驗(yàn)證。
(2)X.509證書場(chǎng)景。Anonymous for Certificate Assertion要求服務(wù)器配置自己的X.509證書,客戶端配置服務(wù)器的X.509證書(僅公鑰),客戶端在使用證書驗(yàn)證時(shí)允許保持匿名。
Mutual Certificate 10 Assertion和 Mutual Certificate 11 Assertion要求客戶端和服務(wù)器均使用自己的X.509證書執(zhí)行相互驗(yàn)證,而后者使用WS-Security1.1規(guī)范確保更好的安全性能。
(3)Kerberos身份驗(yàn)證場(chǎng)景。Kerberos Assertion提供客戶端和服務(wù)器位于同一個(gè)信任域中時(shí)的Kerberos身份驗(yàn)證。由于不需要將證書分發(fā)給所有參與者,需要的部署工作沒有其他身份驗(yàn)證斷言多。
1.身份驗(yàn)證的設(shè)計(jì)。Web服務(wù)的整體解決方案采用Visual Studio 2005開發(fā)。身份驗(yàn)證在設(shè)計(jì)時(shí)根據(jù)不同的安全需求和用戶規(guī)模采用不同的安全策略。對(duì)于一般用戶群,采用Username for Certificate Assertion進(jìn)行簡(jiǎn)單的身份驗(yàn)證,客戶端使用用戶名和口令,服務(wù)器用X.509證書驗(yàn)證身份。對(duì)于重要用戶,采用Mutual Certificate 11 Assertion,客戶端和服務(wù)器都用X.509證書實(shí)現(xiàn)更為安全的驗(yàn)證。
2.Web服務(wù)身份驗(yàn)證的實(shí)現(xiàn)。WSE3.0已經(jīng)集成到Microsoft Visual Studio 2005 IDE開發(fā)環(huán)境中,下面基于C#語(yǔ)言以Username for Certificate Assertion斷言為例,說(shuō)明如何實(shí)現(xiàn)Web服務(wù)的安全身份驗(yàn)證。
(1)開發(fā)環(huán)境構(gòu)建。使用Username for Certificate Assertion時(shí),服務(wù)器需要配置自己的X.509證書,客戶端需要配置用戶名/密碼令牌和服務(wù)器的X.509證書(僅公鑰)。利用windows 2003Server證書服務(wù)構(gòu)建CA服務(wù)器申請(qǐng)服務(wù)器證書,并將其安裝到本地計(jì)算機(jī)的個(gè)人存儲(chǔ)區(qū)??蛻舳讼螺d服務(wù)器證書,并使用MMC將其導(dǎo)入到當(dāng)前用戶的其他存儲(chǔ)區(qū)。
在開發(fā)環(huán)境中要確保已經(jīng)安裝WSE3.0框架并可以運(yùn)行WSE部件。在代碼中加入Microsoft.Web.Services3.dll引用和Microsoft.Web.Service3命名空間。
(2)Web服務(wù)器端開發(fā)創(chuàng)建自定義身份驗(yàn)證。WSE默認(rèn)進(jìn)行基于Windows身份驗(yàn)證,因此用戶需要自定義身份驗(yàn)證。首先創(chuàng)建由 Username Token Manager類派生的自定義類Custom Token Manager,重載AuthenticateToken方法來(lái)處理身份驗(yàn)證。該方法根據(jù)令牌中的用戶名訪問數(shù)據(jù)庫(kù)獲得用戶密碼信息提供給WSE驗(yàn)證,若通過(guò)驗(yàn)證,則允許調(diào)用Web服務(wù)。主要代碼如下:
服務(wù)器端WSE的配置。使用設(shè)置管理器向?qū)нM(jìn)行服務(wù)器WSE的配置,鼠標(biāo)右擊項(xiàng)目,選擇進(jìn)入WSE Settings配置界面,在 General頁(yè)選中“Enable this project for Web Services Enhancements”和“Enable Microsoft Web Services Enhancement SOAP Protocol Factory”復(fù)選框,啟用WSE保護(hù)。在Policy頁(yè)新建名為“ServersPolicy”的安全策略并設(shè)置:應(yīng)用類型選擇“secure a service application”表示是服務(wù)器端。驗(yàn)證方式選擇“username”,采用Username over Certificate Security安全斷言。啟用WS-Security 1.1擴(kuò)展,選擇“Sign and Encrypt”,表示SOAP消息必須簽名和加密。從證書庫(kù)中選擇服務(wù)器的X.509證書。在 Security頁(yè) 中 添 加 Security Token Manager,選 擇“Username Token Manager”,然后將type改為“CustomToken. Custom Token Manager”,表示由CustomTokenManager類處理用戶名令牌。設(shè)置完成后,系統(tǒng)將自動(dòng)更新Web.config和wse3policyCache.config文件中的相關(guān)內(nèi)容。
構(gòu)建Web服務(wù)。在服務(wù)器端添加一個(gè)Web服務(wù)類Service. cs,通過(guò)類屬性Policy指定ServersPolicy策略。主要代碼如下:
(3)客戶端開發(fā)。在解決方案中添加一個(gè)windows客戶端應(yīng)用程序,設(shè)置客戶端WSE。在Policy頁(yè)新建名為“ClientPolicy”的安全策略并進(jìn)行設(shè)置:應(yīng)用類型選擇“secure a client application”表示是客戶端程序。證書選擇用服務(wù)器證書,表示用此證書的公鑰對(duì)用戶令牌進(jìn)行簽名和加密。其他設(shè)置和服務(wù)器端類似??蛻舳酥鞔a如下:
客戶端程序運(yùn)行后,點(diǎn)擊“button1”按鈕,客戶端應(yīng)用程序?qū)⒄{(diào)用SetClientCredential()方法,將包含用戶名和密碼的令牌提供給代理類,如果服務(wù)器端驗(yàn)證通過(guò),客戶端就可以利用代理調(diào)用服務(wù)器端方法了。至此,服務(wù)端和客戶端應(yīng)用程序全部開發(fā)完成。
綜上,身份驗(yàn)證是Web服務(wù)安全的基礎(chǔ),針對(duì)目前多種的安全解決方案,開發(fā)人員可以根據(jù)不同的應(yīng)用需求,選擇不同的安全方案。WSE3.0工具可以提供基于WS-Security等安全規(guī)范的完整解決方案,開發(fā)人員通過(guò)WSE3.0的策略框架來(lái)設(shè)計(jì)安全架構(gòu),實(shí)現(xiàn)了系統(tǒng)的業(yè)務(wù)邏輯與安全邏輯的分離,快速實(shí)現(xiàn)Web服務(wù)的安全需求。