wss4j

Wss4j的學習----這是我第一次寫東西。因爲,我實在是發現了分享知識的重要性。因爲現在的學習基本都是靠百度,google了。呵呵。進入正題。

簡單說明:wss4j是,axis的實現WS-Wecurity安全機制的一個框架。
具備知識:java和axis知識。
運行環境:至少可以跑起來一個axis的程序。哪怕是一個helloworld。
必須的包:wss4j.jar官方地址:http://ws.apache.org/wss4j/
工作原理:我用一張圖來說明一切,你會明白的。

  

是不是非常明白?
爲了方便學習,我下載的是wss4j-bin-1.5.3.zip這個版本,因爲裏面有自帶的幾個例子。我來叫你跑起這些例子便於學習。
一步一步教你跑起這些例子:
  1. 解壓wss4j-bin-1.5.3.zip到wss4j文件夾。看到
  一個比較簡單的例子在samples裏,複雜一點的例子在interop裏。我們先來進行簡單的例子。
  2. 在eclipse裏建個新的項目,我這裏叫做“testwss4j”,建包,和類和官方文件夾相同:
主要的文件說明:
       org.apache.axis.samples.wssec.doall.axisSec包:
            是目標服務器端程序。是org.apache.axis.samples.wssec.doall包裏的sec.wsdl文件生成(生成方法見axis學習文檔)的。
       org.apache.axis.samples.wssec.doall包:
            PWCallback.java文件是,headler對xml文件進行簽名,加密,解密的類。
            Tester.java是客戶端測試類。
            Client_deploy.wsdd文件是,客戶端簽名,加密的配置文件。
3. 主要類說明
        除了PWCallback.java是wss4j.jar中的應用,其他類均爲axis的應用。不做過多說明。
      PWCallback.java說明:
41到46行的說明是指,這裏是給已經加入了user或者keystore alias的soap消息加入或者密碼。可以是identifier的形式也可以是直接設置密碼。由於是例子,這裏是最簡單的給一個user加入一個最簡單的密碼。
4. 運行例子
       運行例子之前會發現項目會有很多錯誤,用你習慣的方式導入項目testwss4j所需要的包。包括axis的所有包和wss4j.jar。我的包的列表:
如果沒有錯誤,首先啓動服務器,發佈目標服務器程序。如果一切順利
可以run as java applicationà org.apache.axis.samples.wssec.doallTester.java。
會得到如下結果:
如果你在PWCallback.java加入斷點就會發現,根本沒有調用加密程序。不過得到結果至少知道這個程序是暢通的。下面我們開始加密。
沒有加密的config-deploy.wsdd的配置文件中SecHttp的服務配置爲:
加入加密配置文件之後爲:
注意紅色框的位置爲加密的配置。說明,目標服務器端接收的soap消息必須是加密的。重啓服務器,允許Tester.java就會發現報錯:
說明你的配置完全正確,因爲請求沒有加密所以報錯。修改Tester.java:
紅色框中爲修改的部分。注意client_deploy.wsdd的地址位置要用“//”分割。重啓服務器,運行Tester.java就會得到剛剛的結果了。如果加入斷點就會進入方法。
5.複雜例子。
在interop文件夾下:
ping.wsdl是服務器接口描述文件。org文件下包括服務器接口的測試類。也包括服務器接口,但是,直接在eclipse裏打開會有很多錯誤,我因爲懶得改正錯誤,所以用ping.wsdl從新生成了服務器端接口,在axis的學習裏就有。但是生成之後就會發現一個問題,本身服務器接口的包是org.apache.ws.axis.oasis.ping,服務器接口的類在這個包下,如果用文件夾裏的ping.wsdl生成的包爲org.xmlsoap .Ping,所以服務器接口都在這個包下。直接放在項目裏就會發現很多關於包的錯誤。爲了和原始包保持一直的思想,修改ping.wsdl,生成包org.apache.ws.axis.oasis.ping。修改了三個地方:
第9行:targetNamespace=http://xmlsoap.org/Ping 修改爲:targetNamespace="http://oasis.axis.ws.apache.org/ping"
第12行:<s:schema elementFormDefault="qualified" targetNamespace="http://xmlsoap.org/Ping">修改爲<s:schema elementFormDefault="qualified" targetNamespace="http://oasis.axis.ws.apache.org/ping">其他地方沒有做改動覆蓋原來的服務器接口。項目中的包都按照org.apache.ws.axis.oasis.ping這個包的形式修改。導入項目後如圖
發佈服務器端接口,等工作不再綴述。
這個項目給了頁面測試,現在把頁面也導入到項目裏。按照原有文件夾的形式,在項目下新建文件夾webapps導入文件如圖:
頁面interop.jsp是項目ping的測試頁面。如果測試通過頁面如下:
我的本地測試端口爲7070。Tomcat默認是8080。7個按鈕,7個不同等級的安全身份驗證。第1個和上面簡單的例子是一樣。我只介紹一個稍微複雜的第3個端口。發生請求和返回請求都加入身份驗證,並且是jks證書驗證。wss4j2.jsp頁面需要修改,原始文件沒有加入wss4j驗證,包的引入也需要修改。修改部分如下:
其他部分沒有修改。
由於只測試接口3,服務名爲Ping3,爲服務器端加入wss4j驗證,修改服務器端配置文件(server-congig.wsdd)爲:
紅色框:
爲服務器端解密並驗證簽名。驗證簽名的配置文件爲test.properties(官方給出配置文件爲wsstest.proterties)。這個文件默認放在classes文件夾下纔可以找到(應該可以修改位置)。驗證簽名的類爲:org.apache.ws.axis.oasis.PWCallback1。如何驗證見這個類。
黃色框:
       爲服務器端返回客戶端時候對消息的簽名配置。配置文件和接收請求的相同。因爲是服務器端向客戶端請求,所以請求用戶名爲“server”,接收端用戶名爲“client”。最後一行屬性爲,簽名加密的算法。
修改客戶端配置文Client_deploy.wsdd
紅色框: 
       爲向服務器端簽名加密申請,申請用戶名爲client,接收服務器爲server。和服務器端請求返回基本相同。
黃色框:
       和服務器端接收請求基本相同。
在客戶端也放上配置文件,test.properties(官方給出配置文件爲wsstest.proterties)。如果沒有問題,可以啓動服務器,運行程序。
選擇interop3的按鈕。會發現出現錯誤:
WSHandler:Encryption: error during message processingorg.apache.ws.security.WSSecurityException: An unsupported signature or encryption algorithm was used (unsupported key transport encryption algorithm: No such algorithm: http://www.w3.org/2001/04/xmlenc#rsa-1_5)
查了資料發現需要一個包:bcprov-jdk15-138.jar。爲什麼需要,我沒有研究,但是加入之後就沒有錯誤了。可以順利通過,結果爲:
Interop2.jks是用keytool工具生成的,我會另做說明。
Wss4j的應用就是這樣。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章