利用WSE 加密SOAP報文(3)

WSE對加密的支持<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 WSE支持對SOAP 報文的部分加密.對稱加密使用一個共享的密鑰,不對稱加密支持使用x.509證書.當使用WSE來加密SOAP報文時,整個body節點的內容被加密,除非明確指定不要加密.下面舉了2個例子,一個加密這個主體部分,一個加密部分.

WSE運行時庫實現了所有的WS-security.SecurityInputFilter SecurityOutputFilter 類中SecurityOutputFilter 類中.前者通過查找Security節點在一個

進入的SOAP報文中,如果該節點存在.它創建了一個代表任意安全標記和加密密鑰,解密節點,驗證任何數字簽名的對象.對於一個進入的報文,任何任何安全的節點都剋通過報文產生的SOAPcontext對象的安全屬性進行訪問.相反的, SecurityOutputFilter爲進出報文實施加密和簽名的操作,附帶任何特定的安全標記或者加密密鑰.安全措施,比如添加標記,加密,或者簽署進出報文利用報文的SOAPContext.SecuritySOAPContext.ExtendedSecurity屬性, ExtendedSecurity只在需要創建安全報頭時候使用Security屬性只在爲包含最終目的地時使用

配置WSE

儘管在安裝時,WSE已經被安裝到asp.net Web 服務器上,但是還需要一些額外的配置,如果需要那些asp.net應用使用安全支持的話.當創建完畢asp.net Web 服務後工程後,visual studio.net,引用Microsoft.Web.Services.dll 程序集需要加載到該項目中.你也需要對SOAPExtensionTypes節點添加一個新的SOAP擴展.這可在 Web.config文件中創建一個新的 add 節點.如下所示

<configuration>

    <system.Web>

      ...

        <WebServices>

            <SOAPExtensionTypes>

                <add type=

                "Microsoft.Web.Services.WebServicesExtension,

                 Microsoft.Web.Services,

                 Version=1.0.0.0,

                 Culture=neutral,

                 PublicKeyToken=31bf3856ad364e35"

                priority="1" group="0" />

            </SOAPExtensionTypes>

        </WebServices>

    </system.Web>

</configuration>

 

type屬性的值必須不能包含任何間斷或者額外的空格.這個例子爲了可讀性有額外的換行. 如果WebServices SOAPExtensionTypes 節點不存在,它們必須加到 Web.config文件裏面.一種更容易的方法是完全WSE配置工具.一種visual studio的插件,使用它您可以非常容易的配置使用WSEWeb service   項目.當然還有一下其他相關的配置必須手工配置.

當使用WSE進行編程時,你需要添加一個Microsoft.Web.Services 和一個System.security名字空間的引用.在客戶端和服務器端的工程中,如果既在客戶請求和服務器迴應中加密了.在客戶部分你應該使用添加Web引用工具爲基於WSEWeb service工程產生Web service代理.

SOAP報文進行對稱加密

接下來,讓我們再來看看如何用WSE來給SOAP報文使用對稱密鑰加密。下面的例子是基於一個啓用WSEWeb服務的,這個Web服務將返回一個SOAP迴應報文,在該報文正文內包含了一些敏感數據。這麼說,客戶端給服務發送一個簡單的Web服務請求,該請求將返回一個由三元 DES對稱加密算法(使用了一個共享密鑰和一個初始向量,IV)加密過的XML文檔,當客戶端收到了加密後的迴應信息後,SecurityInputFilter將調用一個在客戶端的解密密鑰提供程序,來訪問客戶端上相同的共享密鑰,以此來對報文體進行解密,這個解密密鑰提供程序必須由你來編寫,並且提供一個用於同步共享密鑰的方法。這些例子假設雙方都知道密鑰,並且我們所要做的,僅僅是提供密鑰的名字,以此作爲一個暗示,給對方知道我們用的是哪個密鑰加密的信息。

雙方之間管理、同步和和對密鑰保密的時候一定要多加小心。有個解決方案使用了一個分佈式密鑰機制,例如Kerberos。但從WSE1.0版本開始,WSE就不再繼續支持Kerberos了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章