選擇一個(gè)Web服務(wù)安全解決方案可能是一件具有挑戰(zhàn)性的工作。本文將向您展示一些較為流行的解決方案,并且對(duì)這些方案的性能、限制條件等進(jìn)行評(píng)價(jià),供您在選擇時(shí)參考。
Web服務(wù)設(shè)計(jì)的目的是為了將企業(yè)的功能以一種可被共同使用的、松散的聯(lián)結(jié)形式表現(xiàn)出來。雖然有著獲得一個(gè)SOA基礎(chǔ)結(jié)構(gòu)利益的潛力,Web服務(wù)也為企業(yè)的資產(chǎn)帶來了未授權(quán)訪問的風(fēng)險(xiǎn)。因此,通過將訪問權(quán)限限制為只給合法的用戶使用,從而防止一些對(duì)系統(tǒng)完整性造成破壞來保障Web服務(wù)的安全是至關(guān)重要的。
其實(shí),讓我們選擇一個(gè)Web服務(wù)安全解決方案可能是一件使人畏縮的事情。目前,有很多可用的解決方案,而且有很多因素可以決定某一個(gè)特定的方案適合你的情況。雖然每一個(gè)解決方案都提供了相關(guān)的說明文檔等,但我們卻很難找到一個(gè)全面的可以幫助我們做出正確選擇的方法指南。
本文雖然并不是一個(gè)完整的指導(dǎo)方針,卻審視了一些流行的方案,并對(duì)其功能進(jìn)行了評(píng)判。本文討論了一些影響你的方案選擇的因素,并為你提供了一些指南,幫助你做出一個(gè)科學(xué)而理智的決定。為了清楚起見,我們將相關(guān)的代碼和相關(guān)消息也作為本文的一部分列示出來。
傳輸級(jí)vs.消息級(jí)安全
保障Web服務(wù)最常見的一種方法就是使用SSL來保障傳輸通道的安全。這是Web應(yīng)用安全的一個(gè)自然擴(kuò)展,在這種情況下,通過使用SSL,HTTPS協(xié)議來保障HTTP請(qǐng)求/響應(yīng)的安全。SOAP/HTTPS屬于與HTTPS等同的Web服務(wù)。它可以保證程序調(diào)用在保密性和安全性方面是安全的。實(shí)施SOAP/HTTP協(xié)議相對(duì)簡(jiǎn)單,因?yàn)槎鄶?shù)應(yīng)用程序服務(wù)器只是為HTTPS協(xié)議擴(kuò)展了SSL的授權(quán)證書配置。
雖然這種方法可以幫助你快速地建立一個(gè)安全方案,它卻有著一些你必須要考慮的局限性:
SOAP/HTTPS并沒有解決認(rèn)證的需要。它必須與其它的機(jī)制(如Username Token)相結(jié)合,才能處理認(rèn)證問題。
因?yàn)镾SL是為整個(gè)通道加密,它就為性能帶來極大的影響。如果只是消息的局部需要保障安全,可以考慮使用消息級(jí)別的安全(Message Level Security),因?yàn)樗С志植康募用芎屯暾,這顯然會(huì)改善性能。
SSL是一個(gè)點(diǎn)到點(diǎn)(point-to-point)的安全方案,它不適合端到端(end-to-end)的拓?fù)浣Y(jié)構(gòu),因?yàn)樵诙说蕉说慕Y(jié)構(gòu)中,消息需要通過網(wǎng)關(guān)等仲裁設(shè)備進(jìn)行傳送。
通過MLS(即Message Level Security,消息級(jí)安全),安全限制就可以被運(yùn)用于消息自身而不是傳輸通道。Web服務(wù)安全標(biāo)準(zhǔn)在近年來被進(jìn)行了具體的規(guī)定和發(fā)展,已經(jīng)涉及到了MLS的應(yīng)用問題。其中包括大批的標(biāo)準(zhǔn),如XML-Encryption, XML-Signature, UsernameToken, Kerberos, SAML等。這些標(biāo)準(zhǔn)覆蓋了不同的技術(shù),在有些情況下這些標(biāo)準(zhǔn)可以進(jìn)行組合,進(jìn)一步產(chǎn)生一個(gè)綜合性的解決方案。在一個(gè)使用UsernameToken以求鑒定和認(rèn)證并且使用SSL以求機(jī)密性和完整性的例子中,將MLS 與TLS結(jié)合起來是可能的。
為了演示MLS,下面的例子對(duì)一個(gè)樣本性的SOAP/HTTP消息進(jìn)行了加密。這個(gè)作為示例用的是一個(gè)簡(jiǎn)單的計(jì)算器服務(wù),其界面包括一個(gè)可以接受兩個(gè)數(shù)字的乘法方法,還有一個(gè)使用Xfire and WSS4JJ框架的Java客戶端。(筆者在一臺(tái)使用WebSphere 6.1的主機(jī)上測(cè)試了Web服務(wù)),不過多數(shù)應(yīng)用程序服務(wù)器支持基本的SOAP消息安全,因此你可以在另外一臺(tái)可選的服務(wù)器上運(yùn)行這項(xiàng)服務(wù))。你可以從這兒下載這個(gè)示例代碼。其中的ReadMe.html文件描述了下載的zip文件的內(nèi)容。
這個(gè)計(jì)算器服務(wù)通過執(zhí)行EJB來備份。當(dāng)然,你可以有另外的選擇,如選擇JavaBeans等。下面展示的是EJB的界面: