`
conkeyn
  • 浏览: 1528961 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

wss4j和axis2实现WS-Security(1)

 
阅读更多

转自:http://hi.baidu.com/zhaopengletter/blog/item/a85945915dcf378ba877a448.html

 

经过了一个星期的晕头转向之后终于对wss4j和axis2实现WS-Security 有点了解,写了一个demo如下:

一、 wss4j 简介

Wss4j apache 开发的,标准实现 WS-Security (WebService 安全 ) 的开源项目,它提供了用户名令牌环验证 (UsernameToken) 和传递消息时保证信息的完整性和真实性等一些 WebService 安全保障。

二、环境准备

2.1 开发环境准备

在正式开始前还要去下载一个 rampart-1.1.mar ,下载地址 http://apache.hoxt.com/ws/rampart/1_1/ 。把这个东东放到 WEB-INF\modules 下去
这个东东是在 AXIS2 上实现 WSS4J 必需要的一个组件。把 wss4j 的相关 jar 包导到 lib 下。

三、用 KEYTOOL 生成一对 JKS 文件

首先我们用 keytool 生成一对 JKS 文件, service.jks client.jks
service.jks
存放了 service 的私钥和 client 的公钥。
client.jks
存放了 client 的私钥和 service 的公钥。
本人生成的

service.jks 的私钥和公钥 keystore 的密码是 apache
client.jks
的私钥和公钥 keystore 的密码是 apache

( 注如果不会用 keytool 请自己看相关资料,我用的是 apache 提供 sample 的文件 )

2.2 搭建 webservice 环境

axis2.war 包拷贝到 tomcat 安装目录下的 webapps 目录下。

启动 Tomcat(D:\Tomcat5.5\bin\startup.bat) ,打开浏览器输入并访问 :http://127.0.0.1:8080/axis2 来查看 , 结果如下图,表示 axis2 已经工作正常。

四、建立 web 应用

4.1 编写服务器端代码

首先简单介绍我的 Wss4j 实现 WS-Security 功能 , 很简单就是客户端发送一个字符串,服务器端得到该字符串,同时把字符串在发送给客户端, 首先自己建立一个 web 应用工程 , 这里就以我的 wsc 应用工程为例

src 下建一个包 com.neusoft.wss4j.rempart.demo.services 在这里写一个类 SimpleService 作为服务器端

该类的内容是:

package com.neusoft.wss4j.rempart.demo.services;

public class SimpleService

{

     public String echo(String arg)

     {

         return arg;

     }

}

这个类的作用就是接收客户端的字符串,并且把该字符串返回给客户端。

这里还有个类,该类是实现 UsernameToken 和传送信息的安全性和完整性的核心,该类被配置在 axis2.xml service.xml 中,从而能得到用户配置的 axis2.xml 中的信息,和服务器端配置的 service.xml 的 信息。每当客户端发送请求时,它都要首先通过该类获得访问服务端的权限和获得发送数据所需要的加密密码,然后把数据加密发送给服务器端,如果没有权限则不 能把数据发送到服务器端,每当服务器端想要把数据传送到客户端时,也要经过次类获得发送数据所需要的加密密码,然后把数据加密返回给客户端,客户端通过解 密获得明文信息。它的内容如下:

package com.neusoft.wss4j.rempart.demo.services;

import org.apache.ws.security.WSPasswordCallback;

import javax.security.auth.callback.Callback;

import javax.security.auth.callback.CallbackHandler;

import javax.security.auth.callback.UnsupportedCallbackException;

import java.io.IOException;

public class PWCBHandler implements CallbackHandler

{

     public void handle(Callback[] callbacks) throws IOException,

             UnsupportedCallbackException

             {

                        for (int i = 0; i < callbacks.length; i++)

                        {

                            WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];

                            

                            String id = pwcb.getIdentifer();

                            if("client".equals(id))

                            {

                                pwcb.setPassword("apache");

                            }

                            else if("service".equals(id))

                            {

                                pwcb.setPassword("apache");

                            }

                     else

                     {

                         throw new UnsupportedCallbackException(callbacks[i],

                          " 对不起,您不是授权用户,不能访问该 WEB 服务! ");

                     }

                        }

           }

}

 

4.2 编写服务器端的描述文件 services.xml

然后写一个解析该服务器类 services.xml 文件该文件的内容如下:

<? xml version = "1.0" encoding = "UTF-8" ?>

< service name = "wsc" >

     < operation name = "echo" >

        < messageReceiver

          class = "org.apache.axis2.rpc.receivers.RPCMessageReceiver" />

     </ operation >

     < parameter name = "ServiceClass" locked = "false" >

        com.neusoft.wss4j.rempart.demo.services.SimpleService

     </ parameter >

     < module ref = "rampart" />

     <parameter name="InflowSecurity">

        <action>

            <items>Timestamp Signature</items>

            <signaturePropFile>

               keys/service.properties

            </signaturePropFile>

        </action>

     </parameter>

     <parameter name="OutflowSecurity">

        <action>

            <items>Timestamp Signature</items>

            <user>service</user>

             <passwordCallbackClass>

               com.neusoft.wss4j.rempart.demo.services.PWCBHandler

            </passwordCallbackClass>

            <signaturePropFile>

               keys/service.properties

            </signaturePropFile>

            <signatureKeyIdentifier>

               DirectReference

            </signatureKeyIdentifier>

        </action>

     </parameter>

</ service >

 

服务器 wsc 中有几个方法就需要配置几个 < operation ></ operation >

echo wsc 服务器类中的方法 wsc 为服务的名字也就是后边的打包服务器端 wsc .aar 的名字 。着重看下红色粉色 字体部分,红色 这部分是客户端传来信息用数字签名来解密客户端传过来的加密信息本例通过 keys 文件夹下的 service.properties 这个文件找到 service.jks 对信息进行解密,粉色 部分是服务器端把输出向客户端的信息加密用的,本例通过 keys 文件夹下的 service.properties 这个文件找到 service.jks 对信息加密的。

service.properties 的内容如下:

org.apache.ws.security.crypto.provider = org.apache.ws.security.components.crypto.Merlin

org.apache.ws.security.crypto.merlin.keystore.type = jks

org.apache.ws.security.crypto.merlin.keystore.password = apache

org.apache.ws.security.crypto.merlin.file = keys/service.jks

写明了加密文件的类型,文件密码,文件名称。

分享到:
评论

相关推荐

    ws-security 和wss4j的jar包

    2. **wss4j-ws-security-dom.jar**:DOM(Document Object Model)版本的WS-Security实现,用于处理基于DOM的XML消息。 3. **wss4j-ws-security-stax.jar**:STAX(Streaming API for XML)版本的实现,适用于处理...

    ws-security 和 wss4j的jar包

    `ws-security`和`wss4j`就是两个关键的库,它们专注于为基于SOAP的Web服务提供安全支持。这两个组件主要涉及到WS-Security(Web Services Security)规范,该规范定义了一套标准来确保Web服务消息的机密性、完整性和...

    纯java调用ws-security+CXF实现的webservice安全接口

    2. **创建安全上下文**:为了实现身份验证,你需要创建一个`WSS4JOutInterceptor`,并提供安全相关的配置,比如使用`UsernameToken`进行基本认证。这可以通过`WSSecurityProperties`类来完成。 3. **添加拦截器**:...

    wss4j的JAR包

    **标签“wss4j和axis2”关联知识点** - **Apache Axis2**:Axis2是Apache软件基金会的一个开放源代码Web服务引擎,它提供了一种基于SOAP的消息传递模型。Axis2与WSS4J结合,可以提供端到端的Web服务安全解决方案。 ...

    Axis2版本的头鉴权应用

    2. **WSS4J(Web Services Security for Java)**:Apache Axis2通常使用WSS4J库来处理WS-Security相关的操作,包括头鉴权。 3. **用户名令牌(Username Token Profile)**:这是WS-Security中的一种常见认证方式,...

    axis2客户端调用服务端,带用户身份认证

    2. **配置客户端处理程序**:如果使用WS-Security,需要在客户端的 AxisClient 或 ServiceClient 实例中添加适当的处理程序,如WSS4J处理程序,这些处理程序负责在请求中添加必要的安全令牌。 3. **发送安全请求**...

    Axis2中文手册

    1. **WSS4J**:Apache WSS4J实现了OASIS Web Services Security标准,用于对SOAP消息进行签名和验证,与Axis和XML-Security项目兼容,支持与JAX-RPC和.NET环境的互操作。 2. **Rampart**:是Axis2的一个模块,主要...

    WebService:Axis客户端调用需要身份验证的CXF服务

    Axis是一个开放源码的SOAP栈,常用于创建和部署Web服务,而CXF则是一个更现代的Java框架,也用于构建和消费Web服务,支持WS-Security等高级特性。 首先,理解身份验证在Web服务中的重要性。身份验证是确保只有授权...

    WebService服务的安全控制程序例子源码[Security- Web services the secure ]

    在"Server"部分的源码中,可能会看到实现这些安全特性的代码,如使用X.509证书进行SSL/TLS握手,或者使用WSS4J库实现WS-Security头的添加和验证。"Client"则可能包含相应的调用和服务请求,同时处理服务器返回的加密...

    关于rampart encrypt的问题

    Rampart模块基于WSS4J(Web Services Security for Java)库,该库提供了实施WS-Security规范的各种工具。在源码中,我们可以看到Rampart如何创建和管理加密密钥,以及如何在SOAP消息中插入加密元素。开发者可以通过...

    apache开源项目列表.txt

    WSS4J是WS-Security标准的实现,提供了安全的Web服务通信,支持加密和数字签名等功能。 #### 13. Apache WSRF WSRF实现了Web Services Resource Framework标准,提供了一种管理Web服务资源的机制,增强了服务的管理...

    axis1.4 + wrapped + encrypt + signature

    4. **整合过程**:在Axis1.4中实现Wrapped样式加密和签名,开发者需要配置WSS4J(Web Services Security for Java)库,该库提供了在SOAP消息上添加安全头的功能。这包括设置加密和签名的策略,如使用的算法、密钥...

    axis web service

    - **加密和签名**:使用WSS4J库来加密和签名SOAP消息,确保数据在传输过程中的安全。 - **强化部署**:采取措施来防止未经授权的访问,例如设置访问控制列表。 - **输入验证**:确保所有接收到的数据都是合法的,...

    axis部署webservice使用到资源库

    9. **XML Security Libraries** (如wsse.jar, wss4j.jar): 在安全性要求较高的场景下,这些库提供了Web服务安全标准的支持,如WS-Security,用于加密、签名和身份验证。 10. **Protocol Handlers** (如httpclient....

    webservice客户端与服务器端的实现demo

    - **服务器端实现**:首先,定义服务接口和实现类,然后使用XFire或Axis工具发布为Web服务。发布时,需要指定服务的URI和WSDL文件位置。 - **客户端实现**:获取服务器发布的WSDL文件,使用XFire或Axis提供的工具...

    xfire 初体验

    5. **wss4j-1.5.1.jar**:Web Services Security for Java,提供安全相关的支持,如数字签名和加密,确保Web服务的安全通信。 6. **wstx-asl-3.2.0.jar**:Woodstox,一个高效的XML流解析器和生成器,用于处理XML...

    国际天气webservice wsdl地址

    `WSS`可能指的是Web Service的安全性,如使用WS-Security标准来保护数据传输过程。 总的来说,这个主题涉及的技术点包括Web Service架构、WSDL描述、SOAP通信、API使用、编程实践以及可能的安全措施。对于开发者来...

Global site tag (gtag.js) - Google Analytics