`

[转]cxf+spring实现ws-security的数字证书验证方式

 
阅读更多

第一步 生成可用的数字证书
使用命令行打开您要生成数字证书的路径

生成证书还是比较麻烦的,要用到jdk的一个工具——keytool 
首先,创建客户端KeyStore和公钥 
在命令行运行: 
1
、创建私钥和KeyStore 
keytool -genkey -alias clientprivatekey -keypass keypass -keystore Client_KeyStore.jks -storepass storepass -dname "CN=tongtech.com,C=CN" -keyalg RSA  


创建KeyStore,文件名字为Client_KeyStore.jks,里面有个名为clientprivatekey的私钥。 
2
、给私钥进行自签名: 
keytool -selfcert -keystore Client_KeyStore.jks -storepass storepass -alias clientprivatekey -keypass keypass  


签名成功,无任何提示。 
3
、导出私钥 
作用是导出的证书将作为公钥保存到TrustStore中。 
keytool -export -alias clientprivatekey -file Client_PublicCert.cer -keystore Client_KeyStore.jks -storepass storepass  


如果成功,可以看到提示: 
保存在文件中的认证 <Client_PublicCert.cer> 
然后创建服务端KeyStore 
1
、创建私钥和KeyStore

keytool -genkey -alias serverprivatekey -keypass keypass -keystore Server_KeyStore.jks -storepass storepass -dname "CN=tongtech.com,C=CN" -keyalg RSA  


2
、给私钥进行自签名

keytool -selfcert -keystore Server_KeyStore.jks -storepass storepass -alias serverprivatekey -keypass keypass  


3
、导出私钥

keytool -export -alias serverprivatekey -file Server_PublicCert.cer -keystore Server_KeyStore.jks -storepass storepass  


接下来,将客户端公钥导入到服务端TrustStore中,将服务端公钥导入到客户端TrustStore中。
在命令行中输入:

keytool -import -alias clientpublickey -file Client_PublicCert.cer -keystore Server_TrustStore.jks -storepass storepass  


回车后会提示

引用

所有者:CN=tongtech.com, C=CN 
签发人:CN=tongtech.com, C=CN 
序列号:4cc7e86c 
有效期: Wed Oct 27 16:53:00 CST 2010 Tue Jan 25 16:53:00 CST 2011 
证书指纹: 
         MD5:FB:AB:71:9F:56:F3:CB:65:16:DC:52:E0:2D:27:FF:F6 
         SHA1:06:A8:B1:B4:E2:42:9D:B2:F7:99:E7:70:34:08:96:52:E1:CD:4A:76 
         
签名算法名称:SHA1withRSA 
         
版本: 3 
信任这个认证? [] 


y即可,然后提示

引用

认证已添加至keystore


同理,将服务端公钥导入到客户端TrustStore

keytool -import -alias serverpublickey -file Server_PublicCert.cer -keystore Client_TrustStore.jks -storepass storepass   
同样会出现提示,打y回车,提示成功就可以了。
最终你会在您的文件夹中看到如下的文件

cxf+spring实现ws-security的数字证书验证方式 - julia - 栖息地
第二步 服务端配置
1.放置证书的位置和属性配置
将上面生成的文件以Server开头的文件放置在src的cert包下
配置Server_Decrypt.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=storepass
org.apache.ws.security.crypto.merlin.keystore.alias=serverprivatekey
org.apache.ws.security.crypto.merlin.file=cert/Server_KeyStore.jks
这里有个问题要注意,要注意去除空格,否则会报org.apache.ws.security.components.crypto.Merlin Not Found的error
配置Server_Verf.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=storepass
org.apache.ws.security.crypto.merlin.keystore.alias=clientpublickey
org.apache.ws.security.crypto.merlin.file=cert/Server_TrustStore.jks
2.设置配置文件(由于在上一篇文章已经有了基本的配置,这里直接给出WSS4JInInterceptor的配置)
<bean id="WSS4JInInterceptorCert"  class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
        <constructor-arg>  
            <map>  
                <entry key="action" value="Signature Encrypt" />   
                <entry key="signaturePropFile" value="Server_SignVerf.properties"/>
                <entry key="decryptionPropFile" value="Server_Decrypt.properties"/>
                <entry key="passwordCallbackClass" value="ws.interceptor.UTPasswordServerCallBack"/>      
            </map>  
        </constructor-arg>  
    </bean>
3.UTPasswordServerCallBack类
import java.io.IOException;  

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 UTPasswordServerCallBack implements CallbackHandler {  
  
    public void handle(Callback[] callbacks) throws IOException,  
            UnsupportedCallbackException {  
        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];  
        pc.setPassword("keypass");  
        System.out.println("Server Identifier=" + pc.getIdentifier());  
        System.out.println("Server Password=" + pc.getPassword());  
    }  
} 
第三部 客户端配置
1.放置证书的位置和属性配置
将上面生成的文件以Client开头的文件放置在src的cert包下
配置Client_Encrypt.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=storepass
org.apache.ws.security.crypto.merlin.keystore.alias=serverpublickey 
org.apache.ws.security.crypto.merlin.file=cert/Client_TrustStore.jks
配置Client_Sign.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=storepass
org.apache.ws.security.crypto.merlin.keystore.alias=clientprivatekey
org.apache.ws.security.crypto.merlin.file=cert/Client_KeyStore.jks
2.设置配置文件(由于在上一篇文章已经有了基本的配置,这里直接给出WSS4JOutInterceptor的配置)
<bean id="WSS4JOutInterceptorCert" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
         <constructor-arg>  
            <map>  
              <entry key="action" value="Signature Encrypt"/>
              <entry key="user" value="clientprivatekey"/>
              <entry key="signaturePropFile" value="Client_Sign.properties"/>
              <entry key="encryptionUser" value="serverpublickey"/>
                <entry key="encryptionPropFile" value="Client_Encrypt.properties"/>
                <entry key="passwordCallbackClass" value="ws.erp.UTPasswordClientCallBack"/>
              </map>  
          </constructor-arg>    
    </bean>    
3.UTPasswordClientCallBack类
import java.io.IOException;  

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 UTPasswordClientCallBack implements CallbackHandler {  
  
    public void handle(Callback[] callbacks) throws IOException,  
            UnsupportedCallbackException {  
        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];  
        pc.setPassword("keypass");  
        System.out.println("Client Identifier=" + pc.getIdentifier());  
        System.out.println("Client Password=" + pc.getPassword());  
    }  
  
} 

最后结合你的webservice,直接调用你的服务方法就可以了,如果出现以下的提示就证明你成功了
分享到:
评论

相关推荐

    CXF(WS_Security)证书加密

    3. **配置CXF**:在CXF的配置文件(如cxf.xml或Spring配置文件)中,需要设置安全策略,包括启用WS-Security,指定使用的加密算法、证书路径等。 4. **服务端配置**:在服务端,我们需要配置服务端的证书,以及如何...

    我的cxf与ws-security

    【描述】提到的"给CXF加上了一把密码锁"意味着在CXF的Web服务中实现了身份验证和加密功能,这通常是通过配置WS-Security策略来实现的。WS-Security提供了多种安全特性,如数字签名、消息加密、用户名令牌、X.509证书...

    cxf+spring webservice jar包

    geronimo-ws-metadata_2.0_spec-1.1.3.jar h2-1.3.169.jar isorelax-20030108.jar jaxb-api-2.2.6.jar jaxb-impl-2.2.5.jar jaxb-xjc-2.2.5.jar jettison-1.3.2.jar jetty-continuation-7.5.4.v20111024.jar jetty-...

    cxf+Spring实现webservice工程

    当我们谈论"CXF+Spring实现Web服务工程"时,我们实际上是在讨论如何利用Apache CXF框架和Spring框架来创建和消费Web服务。Apache CXF是一个强大的开源框架,它提供了多种方式来构建和部署Web服务,而Spring则以其...

    cxf+spring整合

    CXF支持WS-*标准,如WS-Security、WS-ReliableMessaging等,提供了丰富的API和工具,使得开发者能够方便地创建服务端点和服务客户端。 2. **Spring框架** Spring是Java领域中最受欢迎的轻量级框架,它提供了依赖...

    cxf+spring webservice demo client

    这个示例项目`CXFClient`很可能包含了上述步骤的代码实现,你可以通过阅读和分析代码来深入理解CXF和Spring如何协同工作,创建和消费Web服务。这将帮助你更好地理解和应用这两种强大工具在实际项目中的集成技巧。 ...

    cxf(jax-ws)+spring+hibernate整合包

    logging-1.1.1.jar,cxf-2.7.6.jar,cxf-manifest.jar,cxf-services-sts-core-2.7.6.jar,cxf-services-ws-discovery-api-2.7.6.jar,cxf-services-ws-discovery-service-2.7.6.jar,cxf-services-wsn-api-2.7.6.jar,cxf-...

    Web 服务规范_第 4 部分:WS-Security源码

    在实际开发中,WS-Security的实现通常依赖于库,如Apache CXF、Axis2或Spring-WS,它们提供了API来简化WS-Security的集成。开发者可以通过这些库轻松地在SOAP消息中添加和验证安全元素。 为了实现WS-Security,...

    CXF开发所需jar包

    CXF提供了全面的WS-*(Web Services)标准支持,包括SOAP、WSDL、WS-Security等,同时也支持RESTful API的开发。在进行CXF开发时,依赖的一系列jar包是不可或缺的,它们包含了CXF运行所需的类库和组件。 1. **CXF的...

    cxf+spring+axis包

    CXF 2.4.1是其的一个稳定版本,包含了对WS-*规范的良好支持,如WS-Security、WS-Addressing等。 Spring框架是Java应用开发中的一个核心组件,它提供了一个全面的依赖注入(DI)和面向切面编程(AOP)解决方案。...

    springMVC3+apache CXF+spring security3+mybatis3(proxool)整合maven项目

    Spring Security是Spring生态中的安全框架,用于实现身份验证和授权。它提供了强大的安全控制,包括登录认证、权限控制、会话管理等。Spring Security 3可能用于设置用户访问控制,保护Web应用的各个部分,防止未...

    Apache CXF + Spring3 + REST + JSON配置

    - 可以使用CXF的内置WS-Security审计日志,以及Spring AOP(Aspect-Oriented Programming)进行服务调用的跟踪和性能分析。 - 使用CXF的WS-Addressing和WS-Policy功能增强服务的管理和调试能力。 以上是关于...

    cxf+spring的webservice实例

    - 利用CXF的WS-Security等高级功能,确保服务的安全性。 总的来说,"cxf+spring的webservice实例"是一个实践性的教程,旨在帮助开发者理解如何在Spring环境中利用CXF快速构建和部署Web服务。通过这个实例,你可以...

    CXF3.0+Spring3.2 WSSecurity

    标题中的"CXF3.0+Spring3.2 WSSecurity"指的是使用Apache CXF 3.0版本与Spring 3.2版本结合实现WSSecurity(Web Services Security)的示例或教程。WSSecurity是WS-I(Web Services Interoperability Organization)...

    apache-cxf-3.1.1跟3.1.6所有jar包

    - **cxf-rt-ws-security.jar**:包含WS-Security相关的类和接口。 此外,还有其他如`cxf-rt-bindings-soap.jar`、`cxf-rt-databinding-jaxb.jar`、`cxf-rt-rs-extension-providers.jar`等,它们分别对应于不同的...

    CXF+Spring整合资料

    2. **配置Spring**:在Spring的配置文件(如`applicationContext.xml`)中,你需要定义CXF的Servlet或者JAX-WS服务工厂,以启用CXF的服务发布和消费。这通常涉及到配置`&lt;jaxws:endpoint&gt;`或`&lt;jaxws:client&gt;`元素。 ...

    cxf+spring+hibernate集成整合jar包

    CXF不仅提供客户端和服务器端的Web服务实现,还支持WS-*标准,如WS-Security、WS-ReliableMessaging等。通过CXF,开发者可以轻松地创建和消费Web服务,同时还提供了一套丰富的工具和API来简化这个过程。 **Spring**...

    apache-cxf-3.1.6所有jar包

    - **扩展支持**:如cxf-rt-ws-policy.jar、cxf-rt-ws-security.jar等,包含了WS-*扩展的实现。 - **其他依赖库**:还包括了与CXF协同工作的第三方库,如Spring框架、Apache Commons库等。 在实际开发中,根据项目...

    cxf+spring webService实例

    Spring的Web服务模块(Spring-WS)提供了基于契约优先的Web服务开发方式,而CXF与Spring的集成则可以让开发者利用Spring的丰富特性来管理和配置Web服务。 在"CXF+Spring WebService实例"中,我们需要完成以下步骤:...

    Apache CXF2+Spring2.5轻松实现WebService

    Apache CXF和Spring提供了丰富的扩展点,可以集成如Spring Security来控制访问权限,使用Spring AOP来处理事务,以及通过CXF的拦截器机制来实现自定义的日志、验证等功能。 总结来说,Apache CXF 2与Spring 2.5的...

Global site tag (gtag.js) - Google Analytics