隨筆 - 19, 文章 - 93, 評(píng)論 - 17, 引用 - 0

          導(dǎo)航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(6)

          隨筆分類(22)

          隨筆檔案(19)

          文章分類(107)

          文章檔案(93)

          信息安全

          商業(yè)

          工作流同行

          心情朋友

          搜索引擎

          智能化商業(yè)應(yīng)用

          規(guī)則引擎

          軟件系統(tǒng)設(shè)計(jì)學(xué)友

          軟安全技術(shù)同盟會(huì)

          搜索

          •  

          最新評(píng)論

          • 1.?re: XML 安全: 使用 XACML 控制信息訪問(wèn)
          • 你好,我運(yùn)行了這個(gè)程序,PDP能運(yùn)行但是沒(méi)有request與policy對(duì)比的結(jié)果,想問(wèn)一下怎么回事?
          • --楊琳杰
          • 2.?re: XACML 和 SAML的討論
          • 博主您好。我現(xiàn)在也在看XACML和SAML相結(jié)合方面的內(nèi)容,畢業(yè)論文可能也要跟這個(gè)有關(guān)系。您有什么新的進(jìn)展能發(fā)給我看看么?郵箱:chenjun6036@gmail.com
          • --chenjun
          • 3.?re: XACML 和 SAML的討論
          • 博主你好,我正在學(xué)習(xí)XACML技術(shù),要完成一個(gè)畢業(yè)設(shè)計(jì),能發(fā)一份你的論文給我,留個(gè)聯(lián)系方式討論一下嗎,謝謝,感激不盡!mail:xuminv@gmail.com
          • --chenzui
          • 4.?re: XACML 和 SAML的討論
          • 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
          • --HL
          • 5.?re: XACML 和 SAML的討論
          • 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
          • --金金

          運(yùn)用Web Services安全機(jī)制對(duì)SOAP消息加密

          本文介紹了如何對(duì) WebSphere Information Integrator Content Edition 的 SOAP 消息機(jī)制進(jìn)行改進(jìn),以提供消息完整性和保密性。本文還解釋了如何把 WebSphere IICE 現(xiàn)有的安全機(jī)制整合到 Web Services 安全實(shí)現(xiàn)中來(lái)。同時(shí),本文也是實(shí)現(xiàn) Web Services 安全機(jī)制的一次非常好的實(shí)踐。

            安全已經(jīng)被公認(rèn)為是電子商務(wù)市場(chǎng)成功與否的關(guān)鍵因素之一,尤其是在分布式系統(tǒng)中的Web Services應(yīng)用。WebSphere Information Integrator Content Edition(以下簡(jiǎn)稱為WebSphere IICE)作為企業(yè)信息集成領(lǐng)域的領(lǐng)導(dǎo)者,提供了若干基于SOAP消息的服務(wù)。

            本文介紹了如何對(duì)WebSphere IICE SOAP消息機(jī)制進(jìn)行改進(jìn),以提供消息完整性和保密性。這種機(jī)制包括使用XML 數(shù)字簽名對(duì)消息進(jìn)行簽名來(lái)達(dá)到消息完整性,和使用XML加密對(duì)消息進(jìn)行加密/解密來(lái)達(dá)到消息的保密性。本文還解釋了如何把WebSphere IICE現(xiàn)有的安全機(jī)制整合到Web Services安全實(shí)現(xiàn)中來(lái)。同時(shí),本文也是實(shí)現(xiàn)Web Services安全機(jī)制的一次非常好的實(shí)踐。它不僅能便捷的實(shí)現(xiàn)安全模型、安全算法的隨意擴(kuò)展而且本文的實(shí)現(xiàn)原理能方便的移植到IBM所有需要實(shí)現(xiàn)Web Services安全的產(chǎn)品中。

            1. 背景介紹和動(dòng)機(jī)

            WebSphere IICE作為企業(yè)信息集成的領(lǐng)導(dǎo)者,其基于J2EE框架的結(jié)構(gòu)通過(guò)擴(kuò)展SOAP消息接口實(shí)現(xiàn)了對(duì)Web Services的支持。它主要提供了三種SOAP服務(wù),并把它們命名為WebSphere IICE Web Services。這些服務(wù)-Web Services 接口、SOAP 客戶端代理和SOAP CONNECTOR代理-使得WEBSPHERE IICE能容易的部署在因特網(wǎng)中,并能被因特網(wǎng)中的其他服務(wù)訪問(wèn)。正是WebSphere IICE的這些特性不僅使得其各個(gè)分布式部件能異步的交互,而且還能使得WebSphere IICE各個(gè)分布式部件能無(wú)狀態(tài)的交互,從而省略了會(huì)話狀態(tài)管理,同時(shí)可以不必考慮實(shí)現(xiàn)服務(wù)的協(xié)議和服務(wù)的位置。

            不幸的是,這種結(jié)構(gòu)松散、協(xié)議開(kāi)放的環(huán)境很容易被潛在的安全威脅所攻擊。一個(gè)Web Services消息在到達(dá)目的地之前要在很多個(gè)中間介質(zhì)中傳遞,這樣擁有一個(gè)成熟的消息層面的安全機(jī)制就變得格外重要。

            現(xiàn)在的WebSphere IICE提供的解決SOAP消息在現(xiàn)實(shí)電子商務(wù)網(wǎng)絡(luò)環(huán)境中傳輸安全問(wèn)題的技術(shù)方案還存在一些不足,譬如安全算法簡(jiǎn)單,加密結(jié)構(gòu)靈活性有限等。

            SOAP規(guī)范使得任何安全機(jī)制(數(shù)字簽名、信息完整性保護(hù)、加密/解密等)能方便的應(yīng)用到任何的基于Web Services的應(yīng)用程序中。

            IBM已經(jīng)提供了一個(gè)完整的技術(shù)策略-WS-Security。這樣整個(gè)行業(yè)就能各自實(shí)現(xiàn)此基于標(biāo)準(zhǔn)的結(jié)構(gòu)來(lái)滿足現(xiàn)實(shí)商業(yè)中復(fù)雜的、靈活的Web Services安全需求。通過(guò)提升Web Service核心模塊的可擴(kuò)展性,我們可以獲得基于諸如SOAP、WSDL、XML數(shù)字簽名、XML加密/解密和SSL/TLS等核心技術(shù)的解決方案。這樣使得Web Services的提供者和需求者能根據(jù)各自的應(yīng)用程序安全需求來(lái)開(kāi)發(fā)解決方案。這些解決方案和標(biāo)準(zhǔn)使得我們能夠方便的把Web Services安全解決方案和WebSphere IICE Web Services部件整合在一起。

            2. 實(shí)現(xiàn)原理

            2.1 WebSphere IICE Web Servives概述

            現(xiàn)在WebSphere IICE提供兩個(gè)層次的Web Services部件,一個(gè)是SOAP客戶端代理、SOAP connector代理和Web Services API,我們把這部分叫做WebSphere IICE Web Services客戶端:另外一部分是作為WebSphere IICE Web模塊發(fā)布的服務(wù)器端SOAP實(shí)現(xiàn)。此Web模塊把IICE接口作為Web Services發(fā)布出去并把這些接口和其他模塊整合在一起。從技術(shù)角度來(lái)講,WebSphere IICE Web Services部件利用了Apache Axis工具包。我們可以簡(jiǎn)單的把WebSphere IICE的兩部分理解為Axis客戶端和Axis服務(wù)器端。下面講述了WebSphere IICE Web Services部件的細(xì)節(jié)。

            SOAP客戶代理層(如圖1部件1)應(yīng)用SOAP作為WebSphere IICE標(biāo)準(zhǔn)API和ACCESSSERVICES部件交互協(xié)議。

            SOAP connector代理層(如圖1部件2)應(yīng)用SOAP作為ACCESSSERVICE EJB組件和已經(jīng)部署的CONNECTOR EJB部件的交互協(xié)議。此實(shí)現(xiàn)機(jī)制和SOAP客戶代理層的實(shí)現(xiàn)機(jī)制非常相象。


          圖1:WebSphere IICE Web Services部件

            Web Services調(diào)用接口(如圖1部件3)通過(guò)SOAP接口提供了WebSphere IICE整合接口的絕大部分內(nèi)容。它包括一個(gè)WSDL文件,此文件定義了調(diào)用接口并且提供了一種語(yǔ)言無(wú)關(guān)的方式來(lái)訪問(wèn) Internet 中非結(jié)構(gòu)化的數(shù)據(jù)。
          2.2 WebSphere IICE密文登錄原理

            WebSphere IICE加密機(jī)制是對(duì)BLOWFISH算法的一種實(shí)現(xiàn)。一旦安裝成功,WebSphere IICE會(huì)使用此算法產(chǎn)生一個(gè)密鑰文件同時(shí)要保證此文件在客戶端和CONNECTOR端的CLASSPATH中。如下是應(yīng)用BLOWFISH進(jìn)行加/解密的一個(gè)過(guò)程示例。

            列表1:應(yīng)用blowfish進(jìn)行加、解密過(guò)程

          客戶端的加密過(guò)程:

          ?? //Create and encrypt an AuthBundle.
          ?? AuthBundle aB = new AuthBundle(user, password);
          ?? try {
          ????? //Encrypt the auth bundle
          ????? (new BlowfishSealer()).seal(aB);
          ?? } catch(KeyNotFoundException knfe) {
          ????? ...
          ?? }
          ??

          服務(wù)器端的解密過(guò)程:
          ...use the sealed bundle to logon to a chosen repository.
          ????? ..
          ????? // Unseal the auth bundle if sealed.
          ????? if(authBundle.isSealed()) {
          ???????? // Instantiate an unsealer proxy.
          ???????? UnsealerProxy uP = new UnsealerProxy();
          ???????? try {
          ??????????? // Attempt to unseal the bundle.
          ??????????? // The UnsealerProxy will delegate unsealing
          // to a new instance of "my.magic.Unsealer"
          ??????????? uP.unseal(authBundle);
          ???????? } catch(UnsealerNotFoundException unfe) {
          ??????????? throw new LogonException("Unable … unsealer.", unfe);
          ???????? } catch(KeyNotFoundException knfe) {
          ??????????? throw new LogonException("Unable ….", knfe);
          ???????? } catch(InvalidKeyClassException ikce) {
          ??????????? throw new LogonException("Invalid decryption...", ikce);
          ???????? } catch(EncryptionException ee) {
          ??????????? throw new LogonException("An error ….", ee);
          ???????? }
          ????? }
          ????? ...

            2.3 WebSphere IICE Web Services SOAP消息安全概述

            由于WebSphere IICE使用Axis作為SOAP引擎,我們首先需要了解一下Axis的機(jī)制。可以說(shuō),Axis的任務(wù)就是處理消息。當(dāng)Axis的核心處理邏輯啟動(dòng)時(shí),一系列的句柄會(huì)被順序的調(diào)用。調(diào)用的順序是由兩個(gè)因素來(lái)決定的--部署文件和此引擎為客戶端還是服務(wù)器端。

            WebSphere IICE Web Services會(huì)被一系列的客戶端和服務(wù)器端Axis/JAX-RPC句柄處理。為了能使此安全解決方案正常工作,這些句柄必須被安裝并且要保證安裝順序正確。本文提供了兩套句柄分別實(shí)現(xiàn)消息的加密/解密和消息完整性驗(yàn)證功能,同時(shí)要保證這四個(gè)句柄被正確的安裝在客戶端和服務(wù)器端的WSDD配置文件中,這樣才能保證對(duì)于每一個(gè)從客戶端發(fā)出的消息都被客戶端的證書(shū)加密和簽名,同時(shí)才能保證服務(wù)器端接受到的每一個(gè)消息都是被驗(yàn)證的而且每一個(gè)消息都經(jīng)過(guò)了解密。這樣我們就實(shí)現(xiàn)了SOAP消息的完整性和機(jī)密性。

            同時(shí),用戶可以選擇是否使用此安全機(jī)制。如果用戶傾向于非安全機(jī)制,他所需要做的就是注釋客戶端和服務(wù)器端的WSDD配置文件。

          2.4 WEBSPHERE IICE WEB SERVICE SOAP消息安全實(shí)現(xiàn)細(xì)節(jié)

            A. 配置

            WebSphere IICE Web Services安全機(jī)制的配置工作是由客戶端和服務(wù)器端兩部分組成的。就如下面的配置文件實(shí)例說(shuō)描述的一樣,SOAP消息會(huì)在它被發(fā)送到目標(biāo)服務(wù)器之前分別被不同的句柄簽名和加密。相對(duì)應(yīng)的,它也會(huì)在服務(wù)器端被驗(yàn)證和解密。

            列表2:AXIS客戶端配置文件示例

          <globalConfiguration>
          ????? <requestFlow>????
          ????? <handler
          ?? type="java:com.venetica.vbr.webservices.handler.X509SignHandler"/>
          ????? <handler
          ?? type="java:com.venetica.vbr.webservices.handler.EncryptHandler"/>?????
          ?? </requestFlow>??
          ?? <responseFlow>
          ??? <handler
          ?type="java:com.venetica.vbr.webservices.handler.X509SignHandler"/>
          ??? <handler
          ?type="java:com.venetica.vbr.webservices.handler.DecryptHandler"/>
          ?? </responseFlow>??
          ?</globalConfiguration>

            服務(wù)器端的配置文件和客戶端的配置文件非常相像。

            B. 簽名和加密/解密過(guò)程:

            SOAP消息的簽名和加密/解密過(guò)程如圖2所示:



          圖2:SOAP消息的簽名和加密/解密過(guò)程

            列表3: XML簽名示例代碼

          public Message signSOAPEnvelope(SOAPEnvelope unsignedEnvelope) throws Exception
          ?? {? // WSSignEnvelope signs a SOAP envelope according to the
          ????? // WS Specification (X509 profile) and adds the signature data
          ????? // to the envelope.
          ????? WSSignEnvelope signer = new WSSignEnvelope();
          ????? String alias = "username";
          ????? String password = "password";
          ????? signer.setUserInfo(alias, password);
          ????? Document doc = unsignedEnvelope.getAsDocument();????
          ????? Document signedDoc = signer.build(doc, crypto);
          ????? // Convert the signed document into a SOAP message.
          ????? Message signedSOAPMsg =???????? (org.apache.axis.Message)AxisUtil.toSOAPMessage(signedDoc);
          ????? return signedSOAPMsg;
          ?? }

            列表3顯示了XML簽名的過(guò)程:首先得到SOAP信封,接下來(lái)是獲得用戶證書(shū)信息、產(chǎn)生簽名對(duì)象,然后是用此簽名對(duì)象對(duì)信封進(jìn)行簽名,最后是從被簽名的信封中產(chǎn)生新的SOAP消息。

            列表4:XML加密示例代碼

          public Message encryptSOAPEnvelope(
          ????? SOAPEnvelope unsignedEnvelope, Message axisMessage)
          ????? throws Exception
          ?? {
          ????? WSEncryptBody encrypt = new WSEncryptBody();
          ????? // build the encrypted SOAP part
          ????? Document doc = unsignedEnvelope.getAsDocument();
          ????? Document encryptedDoc = encrypt.build(doc, crypto);
          ????? // Convert the document into a SOAP message
          ????? Message encryptedMsg =
          ???????? (Message)AxisUtil.toSOAPMessage(encryptedDoc);
          ????? // Retrieve the desired SOAP part
          ????? String soapPart = encryptedMsg.getSOAPPartAsString();
          ????? ((SOAPPart)axisMessage.getSOAPPart()). setCurrentMessage(soapPart, SOAPPart.FORM_STRING);
          ????? encryptedDoc =axisMessage.getSOAPEnvelope().getAsDocument();
          ????? // Convert the document into a SOAP message
          ????? Message encryptedSOAPMsg = Message)AxisUtil.toSOAPMessage(encryptedDoc);
          ????? return encryptedSOAPMsg;
          ?? }
          列表4顯示了加密過(guò)程:首先獲得加密前的SOAP信封,接下來(lái)獲得用戶的證書(shū)信息并以此產(chǎn)生加密對(duì)象,然后是應(yīng)用此加密對(duì)象對(duì)獲得的SOAP信封進(jìn)行加密,最后為根據(jù)被加密之后的SOAP消息產(chǎn)生新的SOAP消息并向下傳遞。

            C. 消息對(duì)比:

            圖3和圖4分別顯示了簽名消息和加密消息的對(duì)比情況。


           圖3:應(yīng)用數(shù)字簽名前后SOAP消息對(duì)比


           圖4:應(yīng)用安全加密前后SOAP消息對(duì)比

            3. 益處

          •   A 本實(shí)踐不僅有效的提高了WebSphere IICE Web Services SOAP消息的安全性,而且滿足了對(duì)用戶具有很大意義的新需求。
          •   B 本實(shí)踐提供了一個(gè)實(shí)現(xiàn)當(dāng)前最新的、炙手可熱的Web Services安全標(biāo)準(zhǔn)并把它應(yīng)用于IBM產(chǎn)品的示例。
          •   C 本實(shí)踐提供了怎樣把當(dāng)前較新的技術(shù)和IBM已有的解決方案整合在一起來(lái)滿足用戶新的需求的示例。
          •   D 本實(shí)踐很好的顯示了怎樣在使用Web Services技術(shù)的IBM產(chǎn)品中應(yīng)用Web Services安全。
          •   E WebSphere IICE安全實(shí)現(xiàn)機(jī)制擁有良好可擴(kuò)展性。

            4. 結(jié)論

            本實(shí)踐對(duì)WebSphere IICE的Web Services SOAP消息安全機(jī)制進(jìn)行了改良。同時(shí)提供了一個(gè)把最新技術(shù)標(biāo)準(zhǔn)應(yīng)用于IBM產(chǎn)品的示例。這樣不僅滿足了用戶新的需求而且很好的擴(kuò)展了IBM產(chǎn)品的應(yīng)用場(chǎng)景。

          posted on 2006-12-02 13:18 BPM 閱讀(533) 評(píng)論(0)  編輯  收藏 所屬分類: web services

          主站蜘蛛池模板: 上高县| 桑植县| 米脂县| 琼海市| 东乌| 南宁市| 宁津县| 应用必备| 荣成市| 临潭县| 黄大仙区| 苏尼特左旗| 泾川县| 庐江县| 晴隆县| 银川市| 都匀市| 盈江县| 苍梧县| 嘉禾县| 杭锦后旗| 漳州市| 扎赉特旗| 白朗县| 湘潭县| 潜山县| 龙胜| 阿克苏市| 赤城县| 荥经县| 赣州市| 禄丰县| 姜堰市| 两当县| 响水县| 三台县| 白朗县| 镇沅| 永济市| 运城市| 临猗县|