`
zlping
  • 浏览: 63760 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XFire中实现WS-Security

    博客分类:
  • j2ee
阅读更多

在1.1中已经支持ws-security了。XFire通过wss4j提供ws-security支持。
一、    前提条件:
前提条件要安装Unlimited Strength Jurisdiction Policy(可以在http://java.sun.com/j2se/1.5.0/download.jsphttp://java.sun.com/j2se/1.4.2/download.html下载)和Bouncy Castle(来自http://BouncyCastle.org)。否则会出现无效算法(algorithm)或Key大小(Key Size)
为了能支持WS-Security必须添加两个Handler:inhandlers、outhandlers。
以下必须添加到inHandlers
1、    org.codehaus.xfire.security.wss4j.WSS4JInHandler:执行WS-Security相关的函数;
2、    org.codehaus.xfire.util.dom.DOMInHandler:为WS-Security从StAX 转换成DOM格式。
注:DOMInHandler必须引入Xalan 2.7.0,XFire默认没有引入。
以下添加到outHandlers:
1、    org.codehaus.xfire.security.wss4j.WSS4JOutHandler:执行WS-Security相关的函数;
2、    org.codehaus.xfire.util.dom.DOMOutHandler:为WS-Security从StAX 转换成DOM格式。
二、    安装Unlimited Strength Jurisdiction Policy和Bouncy Castle
1、    安装Unlimited Strength Jurisdiction Policy:把local_policy.jar和US_export_policy.jar两个文件拷贝到:C:\j2re1.4.2\lib\security\下;(如果JRE安装在C:\j2re1.4.2)。
2、    安装Bouncy Castle:
(1)、把下载的bcprov-jdk14-119.jar文件拷贝到两个地方:
一个在你安装的JDK目录中,比如:C:\j2sdk1.4.0-rc\jre\lib\ext。另一个在你的JDK运行环境中,比如:C:\Program Files\Java\j2re1.4.0-rc\lib\ext;
(2)、还要在对两个java.security进行修改:
我的在 C:\j2sdk1.4.0-rc\jre\lib\security\java.security;C:\Program Files\Java\j2re1.4.0-rc\lib\security\java.security;
  在java.security中加入 security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
三、    创建密钥:
1、    通过别名和密码创建私密钥到keystore:
keytool -genkey -alias ws_security -keypass keypassword -keystore privatestore.jks -storepass keyStorePassword -dname "cn=ws_security" -keyalg RSA
    采用RSA算法进行处理。
2、    证书:
keytool -selfcert -alias ws_security -keystore privatestore.jks -storepass keyStorePassword -keypass keypassword
3、    导出公钥到key.rsa:
keytool -export -alias ws_security -file key.rsa -keystore privatestore.jks -storepass keyStorePassword
4、    导入公钥到新的keystore中:
keytool -import -alias ws_security  -file key.rsa -keystore publicstore.jks -storepass keyStorePassword
5、    创建insecurity.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=keyStorePassword
org.apache.ws.security.crypto.merlin.alias.password=keypassword
org.apache.ws.security.crypto.merlin.keystore.alias=ws_security
org.apache.ws.security.crypto.merlin.file=META-INF/xfire/publicstore.jks
6、    创建outsecurity.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=keyStorePassword
org.apache.ws.security.crypto.merlin.alias.password=keypassword
org.apache.ws.security.crypto.merlin.keystore.alias=ws_security
org.apache.ws.security.crypto.merlin.file=META-INF/xfire/privatestore.jks
7、    把文件insecurity,outsecurity.properties,privatestore.jks和publicstore.jks复制到META-INF/xfire/下。
有关keytool的使用说明,请查看以下资料:
http://www.churchillobjects.com/c/11201e.html
http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/keytool.html
http://support.globalsign.net/en/objectsign/java.cfm
四、    实例:
1、    创建服务接口:
package example.services;
public interface BookService {
public String echo(String msg);
}
2、    创建服务实现类:
package example.services;
public class BookServiceImpl implements BookService {
        public String echo(String msg){
        return msg;
    }
}
3、    配制webservices.xml文件:
    <service>
        <name>BookService</name>
        <serviceClass>example.services.BookService</serviceClass>
        <implementationClass>
            example.services.BookServiceImpl
        </implementationClass>
        <style>wrapped</style>
        <use>literal</use>
        <scope>application</scope>
        <inHandlers>
            <handler
                handlerClass="org.codehaus.xfire.util.dom.DOMInHandler" />
            <bean
                class="org.codehaus.xfire.security.wss4j.WSS4JInHandler" xmlns="">
                <property name="properties">
                    <props>
                        <prop key="action">Signature</prop>
                        <prop key="signaturePropFile">
                            META-INF/xfire/insecurity.properties
                        </prop>
                        <prop key="decryptionPropFile">
                            META-INF/xfire/insecurity.properties
                        </prop>
                        <prop key="passwordCallbackClass">
                            example.ws_security.PasswordHandler
                        </prop>
                    </props>
                </property>
            </bean>
        </inHandlers>
    </service>
4、    创建:
package example.ws_security;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.apache.ws.security.WSPasswordCallback;
public class PasswordHandler implements CallbackHandler {
    private Map passwords = new HashMap();

    public PasswordHandler() {
        passwords.put("ws_security", "keypassword");
    }

    public void handle(Callback[] callbacks) throws IOException,
            UnsupportedCallbackException {
        System.out.println("Handling Password!");
        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
        String id = pc.getIdentifer();
        System.out.println("id:"+id+" ,password:"+(String) passwords.get(id));
        pc.setPassword((String) passwords.get(id));
    }
}
5、    客户端实现:
package example.test;

import java.lang.reflect.Proxy;
import java.net.MalformedURLException;

import org.apache.ws.security.WSConstants;
import org.apache.ws.security.handler.WSHandlerConstants;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxy;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.security.wss4j.WSS4JOutHandler;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.codehaus.xfire.util.dom.DOMOutHandler;

import example.services.BookService;
import example.ws_security.PasswordHandler;

public class TTTest {
    private WSS4JOutHandler wsOut;
    private Service service;
    private BookService bookservice;
    private Client client;
    private static final String SERVICE_URL ="http://localhost:8080/TT/services/BookService";
    public TTTest()
    {
        //建议采用此种方式进行创建服务(带有服务名,此例为“BookService”)
        service=new ObjectServiceFactory().create(BookService.class,
                "BookService",
                null,
                null);
        try {
            bookservice=(BookService) new XFireProxyFactory().create(service, SERVICE_URL);
            client = ((XFireProxy) Proxy.getInvocationHandler(bookservice)).getClient();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        
        wsOut = new WSS4JOutHandler();        
        wsOut.setProperty(WSHandlerConstants.SIG_PROP_FILE, "META-INF/xfire/outsecurity.properties");
        wsOut.setProperty(WSHandlerConstants.ENC_PROP_FILE, "META-INF/xfire/outsecurity.properties");
        wsOut.setProperty(WSHandlerConstants.USER, "ws_security");
        //wsOut.setProperty("password", "keypassword11");
        wsOut.setProperty(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PASSWORD_TEXT);
        wsOut.setProperty(WSHandlerConstants.PW_CALLBACK_CLASS, PasswordHandler.class.getName());
        wsOut.setProperty(WSHandlerConstants.SIG_KEY_ID,"IssuerSerial");        
        
        client.addOutHandler(new DOMOutHandler());
        client.addOutHandler(wsOut);

        String actions =WSHandlerConstants.SIGNATURE;  
        //wsOut.setProperty(WSHandlerConstants.TTL_TIMESTAMP,"30");
        wsOut.setProperty(WSHandlerConstants.ACTION, actions);
        System.out.println(bookservice.echo("Client test msg"));
        client.close();
    }
    public static void main(String [] args)
    {
        new TTTest();
    }
}

分享到:
评论

相关推荐

    XFire中实现WS-Security经典

    标题"XFire中实现WS-Security经典"表明了本文将深入探讨如何在XFire框架中实现Web服务安全标准——WS-Security。WS-Security(Web Services Security)是 Oasis 标准组织定义的一套用于保护Web服务交互的安全规范,...

    xfire1.2.6 ws-security示例

    在这个示例中,我们将探讨如何在xfire1.2.6中实现和应用WS-Security。 WS-Security标准由OASIS(Organization for the Advancement of Structured Information Standards)制定,旨在提供一种在SOAP消息层进行安全...

    基于XFire实施WS-Security

    综上所述,基于XFire实施WS-Security是实现Web Service安全的重要途径,它利用WS-Security标准在应用层提供了一套完整的安全策略。通过WSS4J和XFire的Handler机制,开发人员可以方便地对SOAP报文进行加密、签名和...

    xfire+spring实现ws-security(数字签名和报文加密)

    eclipse下spring+xfire实现ws-security的简单例子,包含服务器和客户端的代码,实现用户名/密码.数字签名和报文加密的安全认证,唯一不足的是没有实现数字签名和报文加密的混合模式(可能是密匙文件的问题,正在努力中),...

    ws-security java-mail

    在Xfire中实现`ws-security`,意味着开发者正在为基于Xfire的Web服务添加安全层。Xfire是一款已不再维护的开源Java库,用于构建Web服务客户端和服务端。尽管Xfire已被Apache CXF等更现代的框架取代,但其对`ws-...

    Webservice实现WS-Security(XFire)

    NULL 博文链接:https://zhaoshijie.iteye.com/blog/839050

    WS-Security 安全

    WS-Security的核心是建立在SOAP消息之上,通过在SOAP头中添加安全元素来实现安全功能。其中,UsernameTokenProfile、X.509TokenProfile和SAMLTokenProfile分别提供了基于用户名密码、数字证书和SAML断言的安全令牌...

    使用xfire框架搭建webService的一个demo

    在xfire中实现WS-Security,你需要在服务端配置安全策略,如使用用户名令牌、X.509证书等。客户端则需要在发送请求时附带相应的安全信息。这通常涉及设置SOAP Header中的`wsse:Security`元素,并添加适当的`wsu:...

    xfire spring security

    《xfire与Spring Security整合实现WS-Security安全认证详解》 在现代企业级应用开发中,安全性是不可或缺的重要环节。Spring Security作为Java领域的安全框架,提供了全面的身份验证和授权服务。而Xfire(现已被...

    xfire-distribution-1.2.3

    4. **广泛的协议支持**: XFire 支持 SOAP 1.1 和 1.2,WS-Security,WS-Addressing 等多种 Web 服务标准,以及 JAXB 和 JiBX 等数据绑定技术。 5. **Aegis Databinding**: XFire 自带的 Aegis 数据绑定引擎,能够...

    Xfire整合webservice jar包

    支持多种Web服务业界重要标准如SOAP、WSDL、Web服务寻址(WS-Addressing)、Web服务安全(WS-Security)等; 支持JSR181,可以通过JDK5配置Web服务; 高性能的SOAP实现; 服务器端、客户端代码辅助生成; 对Spring、...

    xfire-all-1.2.4.jar包webService

    这个库包含了XFire的核心组件和其他必要的依赖,使得开发者能够方便地在Java应用中实现Web服务的客户端和服务端功能。 **SOAP协议**:SOAP是一种基于XML的数据交换协议,用于在分布式环境中传输数据。它允许应用...

    WebService之XFire和Jax实现身份验证

    XFire和JAX(Java API for XML)都是在Java环境中实现WebService的重要工具,它们分别提供了不同的方法来处理身份验证,确保数据安全传输。 XFire是早期的一个开源项目,它是一个快速、灵活的Web服务框架,支持SOAP...

    xfire访问webservice客户端用到的jar包

    XFire支持WS-Security,可以实现消息级的安全性,如数字签名和加密。这使得敏感数据在传输过程中得到保护,防止被窃取或篡改。 6. **与其他技术的集成** XFire与Spring框架的紧密集成使得它易于在企业级应用中...

    xfire-distribution-1.2.6.rar

    10. **安全性**:虽然XFire 1.2.6不包含Xalan,但它支持WS-Security标准,可以实现基于SOAP消息的安全认证和加密。 在"lib"目录下,通常会包含XFire运行所需的JAR文件,如XFire的核心库、依赖的XML解析器、JAXB实现...

    xfire-1.2.6 jar包

    这个jar包是Java Archive(JAR)格式,它包含了一系列的类文件和其他资源,使得开发者能够轻松地在应用程序中实现XML-based Web服务。在Web服务器环境下,它扮演着至关重要的角色,为开发和部署Web服务提供了必要的...

    xfire验证签名加密详细

    本文将详细介绍如何在Spring框架中集成XFire并实现基于WS-Security的安全策略,包括验证、签名和加密。首先,我们需要创建一个Web工程`xfireDemo`,并添加必要的依赖库。这些库包括Spring的核心模块,AOP支持,日志...

    xfire资料

    XFire简化了在Java应用程序中实现和调用Web服务的过程。它支持WSDL(Web服务描述语言)的生成和解析,使得开发者可以基于接口定义服务,并自动处理序列化和反序列化。此外,文档可能还涵盖了配置、部署以及如何测试...

Global site tag (gtag.js) - Google Analytics