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