首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Web Services:Axis2 WS-Security 基礎與 Rampart 實作

     編輯:Java 相關知識

WS-Security 概覽

WS-Security 為 SOAP 訊息提供安全性擴充,透過 Header 傳遞 UsernameToken、X.509 憑證、簽名、加密等資訊。結構複雜,需機器可讀的策略描述:WS-Policy + WS-SecurityPolicy,可內嵌於 WSDL。

Rampart 模組

Axis2 的安全模組(rampart.mar、rahas.mar),攔截訊息流處理安全邏輯。

安裝步驟

  1. 複製 .jar 至 Axis2 lib,.mar 至 repository/modules。
  2. 加入 Bouncy Castle Provider:security.provider.99=org.bouncycastle.jce.provider.BouncyCastleProvider 於 java.security。
  3. 重建 axis2.war 部署至 Servlet 容器。

範例應用:圖書館服務

三操作:getBook、addBook、getBooksByType,採 ADB 資料綁定。

UsernameToken 明文傳輸

Policy 定義

<sp:SupportingTokens> <wsp:Policy> <sp:UsernameToken sp:IncludeToken=".../AlwaysToRecipient" /> </wsp:Policy> </sp:SupportingTokens>

Server 端:services.xml 內嵌 Policy + 密碼回調

<module ref="rampart"/> <wsp:Policy ...> ... <ramp:RampartConfig> <ramp:passwordCallbackClass>...PWCBHandler</ramp:passwordCallbackClass> </ramp:RampartConfig> ... </wsp:Policy>

回調類驗證用戶名/密碼:

public class PWCBHandler implements CallbackHandler { public void handle(Callback[] callbacks) { for (Callback cb : callbacks) { WSPasswordCallback pw = (WSPasswordCallback) cb; if (pw.getUsage() == USERNAME_TOKEN_UNKNOWN) { if (!"libuser".equals(pw.getIdentifier()) || !"books".equals(pw.getPassword())) throw new UnsupportedCallbackException(cb, "check failed"); } } } }

Client 端:程式化配置

ServiceClient client = stub._getServiceClient(); Options opts = client.getOptions(); opts.setProperty(RampartMessageData.KEY_RAMPART_POLICY, loadPolicy("policy.xml")); opts.setUserName("libuser"); opts.setPassword("books"); client.engageModule("rampart");

驗證結果:TCPMon 擷取 SOAP 訊息

<wsse:Security> <wsse:UsernameToken> <wsse:Username>libuser</wsse:Username> <wsse:Password Type="...#PasswordText">books</wsse:Password> </wsse:UsernameToken> </wsse:Security>

加強 UsernameToken 安全性

1. 強制 HTTPS 傳輸

<sp:TransportBinding> <wsp:Policy><sp:TransportToken><wsp:Policy><sp:HttpsToken RequireClientCertificate="false"/></wsp:Policy></sp:TransportToken></wsp:Policy> </sp:TransportBinding>

Rampart 會拒絕 HTTP 連線。

2. 密碼摘要

Policy 加入 <sp:HashPassword/>,訊息攜帶 Nonce、Created、PasswordDigest(SHA-1(Base64(Nonce + Created + Password))),防重放與竄改:

<wsse:Password Type="...#PasswordDigest">/Wt/2yDdZwa8a5qd7U70hrp29/w=</wsse:Password> <wsse:Nonce>4ZQz5ytME/RXfChuKJ03iA==</wsse:Nonce> <wsu:Created>2009-03-17T11:20:57.467Z</wsu:Created>

結語

掌握 Axis2 + Rampart 基礎安全配置,後續將探討 XML 加密與簽名進階應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved