`
xiaofengtoo
  • 浏览: 493979 次
  • 性别: Icon_minigender_1
  • 来自: xiamen
社区版块
存档分类
最新评论

cxf ws-security 加密和签名的实现

阅读更多

以下文章为 cxf 官方 google 翻译,英文好的朋友可以直接看原文:

http://cxf.apache.org/docs/ws-security.html

 

WS - Security提供了手段,以确保您的服务,如HTTPS传输级别的协议超出。 通过一些标准,如XML加密,并在WS - Security标准中定义的头,它可以让你:

  • 在服务之间传递的身份验证令牌
  • 对信息进行加密或部分消息
  • 登录消息
  • 时间戳消息

目前,CXF的实现结合的WS - Security WSS4J 要使用的集成,你需要配置这些拦截器,并将它们添加到您的服务和/或客户。

 

加密和签名的概述

WS - Security的公共/私人密钥加密技术的大量使用。 要真正了解如何配置的WS - Security,它是有用的 - 如果没有必要 - 要了解这些基础知识。 维基百科在此有一个极好的入门 ,但我们会尝试总结了相关的基础知识(此内容是维基百科的内容修改后的版本.. )

与公共密钥加密,用户有一对公钥和私钥。 这些都是用一个大素数和一个关键功能。


键是有关数学的,但不能从一个派生。 与这些键,我们可以对信息进行加密。 例如,如果Bob想将消息发送给Alice,他可以用她的公钥加密消息。 然后,Alice可以解密此消息使用她的私钥。 只有Alice可以解密此消息,因为她是用私钥只有一个。



 信息也可以签署。 这使您可以确保消息的真实性。 如果Alice想将消息发送给Bob,Bob想确保它是从Alice,Alice可以使用自己的私钥来签名消息。 然后,Bob可以确认该消息是从Alice用她的公钥。


配置WSS4J拦截

为了使内CXF的WS - Security的服务器或客户端,你需要成立WSS4J拦截。 您可以通过API独立的Web服务或通过Spring XML配置servlet的主办。 本节将提供一个概述如何做到这一点,以下各节将进入更详细的拦截器配置为特定的安全行动。

重要的是要注意:

  1. 如果你是使用CXF 2.0.x的,你必须添加SAAJ(IN / OUT)拦截器,如果你使用WS - Security(自动为你这样做是CXF的2.1起)。 这些使创建为每个请求/响应的DOM树。 WS - Security的支持库需要DOM树。
  2. Web服务提供者可能并不需要和WS -安全拦截。 例如,如果你只是需要传入消息的签名,Web服务提供者将只需要传入WSS4J拦截的SOAP客户端只需要传出。

 

通过API添加拦截器

在服务器端,你将要添加的拦截您的CXF的端点。 如果你使用的JAX - WS的API发布您的服务,你可以得到你这样的CXF的端点:

 

import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.jaxws.EndpointImpl;

EndpointImpl jaxWsEndpoint = (EndpointImpl) Endpoint.publish("http://host/service", 
    myServiceImpl);
Endpoint cxfEndpoint = jaxWsEndpoint.getServer().getEndpoint();

 

如果您使用过的(JAXWS)ServerFactoryBean,你可以简单地通过服务器对象的访问:

 

import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.frontend.ServerFactoryBean;

ServerFactoryBean factory = ...;
...
Server server = factory.create();
Endpoint cxfEndpoint = server.getEndpoint();

 

 在客户端,您可以得到一个参考CXF的端点使用ClientProxy帮手:

 

import org.apache.cxf.frontend.ClientProxy;
...

GreeterService gs = new GreeterService();
Greeter greeter = gs.getGreeterPort();
...
org.apache.cxf.endpoint.Client client = ClientProxy.getClient(greeter);
org.apache.cxf.endpoint.Endpoint cxfEndpoint = client.getEndpoint();

 

 现在您可以添加拦截器:

 

import org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
...

Map<String,Object> inProps= new HashMap<String,Object>();
... // how to configure the properties is outlined below;

WSS4JInInterceptor wssIn = new WSS4JInInterceptor(inProps);
cxfEndpoint.getInInterceptors().add(wssIn);

Map<String,Object> outProps = new HashMap<String,Object>();
... // how to configure the properties is outlined below;

WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
cxfEndpoint.getOutInterceptors().add(wssOut);

 

Spring XML 配置

如果你使用Spring来构建端点(例如,如Tomcat servlet容器中运行的Web服务),您可以轻松地完成您的bean定义,而不是使用上面。

 

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath*:META-INF/cxf/cxf-extension-*.xml" />

<jaxws:endpoint id="myService"
   implementor="com.acme.MyServiceImpl"
   address="http://localhost:9001/MyService">

   <bean id="myPasswordCallback"
      class="com.mycompany.webservice.ServerPasswordCallback"/>

   <jaxws:inInterceptors>
      <!-- SAAJ Interceptor needs to be explicitly declared only in CXF 2.0.x --> 
      <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"/>
      <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
         <constructor-arg>
            <map>
               <entry key="action" value="UsernameToken"/>
               <entry key="passwordType" value="PasswordDigest"/>
               <entry key="signaturePropFile" value="..."/>
               <entry key="passwordCallbackRef">
                  <ref bean="myPasswordCallback"/>
               </entry>
               ...
            </map>
         </constructor-arg>
      </bean>
   </jaxws:inInterceptors>
</jaxws:endpoint>

 

参数的构造元素以上(行动,signaturePropFile等)映射到WSS4J的文本字符串的输入键和值WSHandlerConstantsWSConstants 您在下面的章节中看到相应WSHandlerConstants.XXXXX和WSConstants.XXXX的常量类。

 

因此,通过观察WSHandlerConstants,例如,你可以看到以下的WSHandlerConstants.USERNAME_TOKEN值将需要“的UsernameToken”,而不是在做Spring配置。

 

如果你想避免WSHandlerConstants.XXXXX WSConstants.XXXX常数的文字键,你也可以使用Spring UTIL命名空间,在Spring上下文中引用静态常量,如下图所示。

 

<beans
  ...
  xmlns:util="http://www.springframework.org/schema/util"
  ...
  xsi:schemaLocation="
        ...
        http://www.springframework.org/schema/util 
        http://www.springframework.org/schema/util/spring-util.xsd">

  ...

  <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
    <constructor-arg>
      <map>
        <entry value="UsernameToken">
          <key>
            <util:constant 
                static-field="org.apache.ws.security.handler.WSHandlerConstants.ACTION"/>
          </key>
        </entry>
        ...
      </map>
    </constructor-arg>
  </bean>

  ...  

 

其他配置选项

虽然CXF WSS4J拦截器支持标准配置属性WSHandlerConstants.XXXXX和WSConstants.XXXX,CXF还提供了一些额外的低水平WSS4J和其他一些安全相关的拦截器配置功能的访问。

验证签名和/或加密邮件内容

2.2.8 CXF的,CryptoCoverageChecker拦截允许不迁移到一个基于WS - SecurityPolicy来配置一个验证签名和加密消息内容的覆盖面。 拦截器可以支持两种元素的含量水平的签名和加密覆盖的执法(知道签名和内容的结合,并不代表一个类型的覆盖面和覆盖范围的有效组合)。 要使用API​​配置这个拦截器,请按照下面的例子。

 

import org.apache.cxf.ws.security.wss4j.CryptoCoverageChecker;
import org.apache.cxf.ws.security.wss4j.CryptoCoverageChecker.XPathExpression;
import org.apache.cxf.ws.security.wss4j.CryptoCoverageUtil.CoverageScope;
import org.apache.cxf.ws.security.wss4j.CryptoCoverageUtil.CoverageType;

Map<String, String> prefixes = new HashMap<String, String>();
        prefixes.put("ser", "http://www.sdj.pl");
        prefixes.put("soap", "http://schemas.xmlsoap.org/soap/envelope/");

List<XPathExpression> xpaths = Arrays.asList(
    new XPathExpression("//ser:Header", CoverageType.SIGNED, 
        CoverageScope.ELEMENT),
    new XPathExpression("//soap:Body", CoverageType.ENCRYPTED, 
        CoverageScope.CONTENT));

CryptoCoverageChecker checker = new CryptoCoverageChecker(prefixes, xpaths);

 

 拦截器也可以在使用常规的bean定义格式Spring配置。

上述配置后拦截,只需将您的客户端或服务器的拦截器链与WSS4J拦截previsouly显示拦截。 确保您包括W​​SS4JInInterceptor链中的所有请求将被拒绝,如果你执行任何覆盖的XPath。

定制处理器

 

CXF的2.0.10和2.1.4,您可以指定自定义WSS4J处理器配置的WSS4JInInterceptor。 要激活此配置选项,提供一个非WSS4J的产权界定,wss4j.processor.map,WSS4JInInterceptor在 Spring 的例子所示。

 

相同configuratoin可以通过API以及acheieved。 关键值是一个XML的WS - S的头元素的限定名称与给定的处理器实现过程。 条目的值可以是一个字符串,代表一个实例处理器,处理器,或者为null禁用处理给定的WS - S的头元素的对象的类名。

 

<bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
  <constructor-arg>
    <map>
      ...
      <!-- This reconfigures the processor implementation that WSS4j uses to 
               process a WS-S Signature element. -->
      <entry key="wss4j.processor.map">
        <map key-type="javax.xml.namespace.QName">
          <entry value="my.class">
            <key>
              <bean class="javax.xml.namespace.QName">
                <constructor-arg value="http://www.w3.org/2000/09/xmldsig#"/>
                <constructor-arg value="Signature"/>
              </bean>
            </key>
          </entry>
        </map>
      </entry>
      ...
    </map>
  </constructor-arg>
</bean>

 

自定义操作

2.2.6 CXF的,您可以指定自定义WSS4J WSS4JOutInterceptor行动配置。 要激活此配置选项,提供一个非WSS4J的产权界定,wss4j.action.map,WSS4JOutInterceptor在次年春天的例子所示。

 

相同configuratoin可以通过API以及acheieved。 关键值是一个整数,代表WSS4J行动标识符。 条目的值可以是一个字符串,代表的行动,以实例的类名或对象实施行动。 此配置选项可以覆盖内置的行动实现,或添加您自己的。

 

<bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
  <constructor-arg>
    <map>
      ...
      <!-- Redefines the action for SAMLTokenSigned 
               to use a custom implementation.  -->
      <entry key="wss4j.action.map">
        <map key-type="java.lang.Integer" value-type="java.lang.Object">
          <entry key="0x10" value-ref="mySamlTokenSignedAction"/>
        </map>
      </entry>      ...
    </map>
  </constructor-arg>
</bean>

配置WS - Security的动作

 

用户名令牌认证

WS - Security支持指定标记的方法很多。 其中之一是的UsernameToken头。 它是一种标准的方式传达到另一个端点的用户名和密码或密码消化。 一定要检讨绿洲UserNameToken配置文件规范 为重要的安全考虑,在使用UsernameTokens时。 注意规范的建议,为防范重放攻击,nonce的支持尚未得到落实CXF或WSS4J。

对于服务器端,你需要设置以下WSS4JInInterceptor属性(见上面 的代码示例):

 

 
inProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
// Password type : plain text
inProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
// for hashed password use:
//properties.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_DIGEST);
// Callback used to retrieve password for given user.
inProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, 
    ServerPasswordHandler.class.getName());

 

密码回调类,允许您检索检索给定用户的密码,这样的WS - Security可以判断,如果他们授权。 这里是一个小例子:

 

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 ServerPasswordCallback implements CallbackHandler {

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

        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];

        if (pc.getIdentifier().equals("joe")) {
            // set the password on the callback. This will be compared to the
            // password which was sent from the client.
            pc.setPassword("password");
        }
    }

}

 

请注意,包括CXF的2.3.x,一个纯文本的密码(或任何其他未知的密码类型)特殊情况的密码验证委托回调类 ,看到org.apache.ws.security。 processor.UsernameTokenProcessor#handleUsernameToken()方法的Javadoc WSS4J 项目。 在这种情况下,ServerPasswordCallback应类似以下:

 

public class ServerPasswordCallback implements CallbackHandler {

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

        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];

        if (pc.getIdentifer().equals("joe") {
           if (!pc.getPassword().equals("password")) {
                throw new IOException("wrong password");
           }
        }
    }

}

 

CXF的2.4起,回调处理程序提供的所有情况下的密码,并验证是在内部完成(但可配置)。 更多信息, 参见这里。
在客户端,您将要配置的WSS4J传出属性:

 

outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
// Specify our username
outProps.put(WSHandlerConstants.USER, "joe");
// Password type : plain text
outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
// for hashed password use:
//properties.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_DIGEST);
// Callback used to retrieve password for given user.
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, 
    ClientPasswordHandler.class.getName());

 

再次,我们正在使用的密码回调,除了这个时间,而不是说明我们在服务器端的密码,我们指定的密码,我们要随消息一起发送。 这是我们没有我们的配置文件存储在我们的密码。

 

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 ClientPasswordCallback implements CallbackHandler {

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

        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];

        // set the password for our message.
        pc.setPassword("password");
    }

}

 

在多个用户使用不同的密码的情况下, 使用 WSPasswordCallback“getIdentifier()方法来获得当前的SOAP请求的用户名。

 

这里是一个例子 使用拦截器(使用UsernameToken的)的注释实施的WS - Security 。

 

使用X.509证书

X.509证书令牌简介( PDF )提供了另一种实现WS - Security的选项。 对于签名和加密操作,你需要创建一个公共和私人的关键,所涉及的实体。 您可以通过以下步骤为您的开发环境生成自签名的密钥对。 记住这些不会象Verisign的外部权威签署的,所以在生产中使用不恰当的。

 

1。 创建与给定的别名,像“myAlias​​”/“myAlias​​Password”在密钥库密码私钥(由密码保护 安全原因)

keytool -genkey -alias myAlias -keypass myAliasPassword -keystore \ 
  privatestore.jks -storepass keyStorePassword -dname "cn=myAlias" -keyalg RSA
 

别名,是一个简单的的方法来确定密钥对。 在这种情况下,我们使用的是RSA算法。

 

2。 自签署的证书(在生产环境中,这将是做一个像VeriSign这样的公司)。

 

keytool -selfcert -alias myAlias -keystore privatestore.jks \ 
    -storepass keyStorePassword -keypass myAliasPassword

 

 3。 从我们的私人密钥库中导出的公钥文件命名key.rsa

 

keytool -export -alias myAlias -file key.rsa -keystore privatestore.jks \ 
    -storepass keyStorePassword

 

4。 公钥导入到新的keystore:

 

keytool -import


 -alias myAlias  -file key.rsa -keystore publicstore.jks \ 
    -storepass keyStorePassword

 

所以,现在我们有两个密钥库包含我们的钥匙 - 公共(publicstore.jks)和私人(privatestore.jks)。 他们都有keystore密码keyStorePass(不建议用于生产,但发展确定)和别名设置到myAlias​​。

 

该文件key.rsa可以从文件系统中删除,因为它只是暂时的使用。 强烈建议,因为一个keystore受密码保护密钥库中存储键。

 

密钥生成一个更详细的说明可以在这里找到:
http://java.sun.com/javase/6/docs/technotes/tools/solaris/keytool.html

如何创建一个生产证书,可以在这里找到:
http://support.globalsign.net/en/objectsign/java.cfm

 

签名

 

邮件签名是用来验证该消息只能从某个发件人的收件人,以及消息在传输过程中不改变。 特别的发件人加密一个用其私有密钥的消息消化(散列),并在收件人unencrypting用发件人的公钥的哈希,并重新计算,以确保消息是不是在传输过程中改变的消息摘要(即,消化计算值由发送者和接收者都是一样的)。 对于这一过程的发生,你必须确保客户端的公钥已经被导入到服务器的keystore使用keytool。

 

在客户端,我们传出的WS - Security属性看起来像这样(见上面 的代码示例):

 

outProps.put(WSHandlerConstants.ACTION, "Signature");
outProps.put(WSHandlerConstants.USER, "myAlias");
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, 
    ClientCallbackHandler.class.getName());
outProps.put(WSHandlerConstants.SIG_PROP_FILE, "client_sign.properties");

 指定的用户客户端的密钥别名。 密码回调类是负责提供该密钥的密码。

 

提示

为X.509的支持,您将通常有多个动作,例如加密与签名。 对于这些情况,只是空间独立的行动,在ACTION属性如下:

outProps.put(WSHandlerConstants.ACTION 
     WSHandlerConstants.TIMESTAMP +“”+ 
     WSHandlerConstants.SIGNATURE +“”+ 
     WSHandlerConstants.ENCRYPT);
 

或者,您可能空间单独的字符串文字,您会看到在上面的Spring配置(例如,“签名加密”)

 

我们client_sign.properties文件包含几个设置来配置WSS4J:

 

 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
 

 

在服务器端,我们需要来配置我们的传入WSS4J拦截,使用客户端的公钥来验证签名。

 

 inProps.put(WSHandlerConstants.ACTION,“签字”);

 inProps.put(WSHandlerConstants.SIG_PROP_FILE,“server.properties”);
 

我们server_sign.properties文件包含几个设置来配置WSS4J:

 

 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 = amex123

 org.apache.ws.security.crypto.merlin.file = server_keystore.jks

加密

加密涉及的发件人与收件人的公钥加密的消息,以确保,只有收件人可以读取消息(只有收件人有其自己的私人密钥,解密消息所必需的。)这要求发件人以有收件人的公钥在其密钥库。

 

 

用于加密的过程是非常相似,的确通常与上面的签名过程中结合。 我们的WS - Security的测试 样品提供了一个加密的请求和响应的例子, 还要检查这个 博客条目月底到年底更显示SOAP请求和响应的签名和加密的例子。

 

 

以下是本人参照的几个网址:

 

http://www.benmccann.com/dev-blog/apache-cxf-tutorial-ws-security-with-spring/

http://cxf.apache.org/docs/ws-security.html

http://blog.csdn.net/kunshan_shenbin/article/details/3813000


http://www.ibm.com/developerworks/cn/java/j-jws13.html?ca=drs-cn-0419  


http://www.benmccann.com/dev-blog/apache-cxf-tutorial-ws-security-with-spring/

 

  • 大小: 13.3 KB
  • 大小: 16.1 KB
  • 大小: 16.7 KB
分享到:
评论
1 楼 zqb666kkk 2015-10-23  
博主有示例代码吗

相关推荐

    CXFWS-Security

    1)参考: ...2)CXFWS工程是基于WS-Security规范,实现X.509身份验证的,同时实现签名和加密 keytool 工具的使用参考 http://hi.baidu.com/qianshuifanchuan/blog/item/6291b8510009ad3c42a75b8e.html ...

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

    5. **签名和加密**:如果需要更高级的安全性,ws-security还支持消息签名和加密。签名可以证明消息来源的真实性,加密则可以保护数据的隐私。在CXF中,你可以配置`WSS4JOutInterceptor`来添加这些功能。 6. **测试...

    CXF(WS_Security)证书加密

    WS-Security(Web Services Security)是一种标准,定义了如何在SOAP消息中添加安全信息,如数字签名、加密等,以确保消息的完整性和机密性。WS-Security是OASIS(Organization for the Advancement of Structured ...

    CXF WS-Security WSS4J 例子

    2. **WSS4J**:作为CXF中实现WS-Security的库,WSS4J提供了丰富的API,允许开发者在发送和接收Web服务请求时添加安全头信息。这些头信息可以包含用户名令牌、X.509证书、SAML令牌等,以实现不同级别的身份验证和授权...

    ws-security 和wss4j的jar包

    1. **wss4j-ws-security-common.jar**:这个库包含了WS-Security的核心实现,包括加密、签名、证书管理等功能。 2. **wss4j-ws-security-dom.jar**:DOM(Document Object Model)版本的WS-Security实现,用于处理...

    cxf+ws-security-JAR

    【标题】"cxf+ws-security-JAR"指的是Apache CXF框架与WS-Security整合创建的JAR包,用于在Web服务(Web Service)中实现...这个JAR包很可能包含了一些预配置的CXF组件和相关的WS-Security实现,便于快速集成到项目中。

    我的cxf与ws-security

    综上所述,"我的cxf与ws-security"项目是一个关于在Apache CXF中实施WS-Security安全标准的实践,涉及到Web服务的安全配置、策略设定、令牌处理、消息签名和加密等多个环节,通过不断的调试和完善,确保了Web服务的...

    ws-security jar

    通常,这样的库会包含一系列接口和实现,例如用于XML数字签名的类、XML加密的类,以及用于处理SOAP消息中安全头的工具。 在深入探讨WS-Security之前,需要理解其基本概念。WS-Security是 Oasis Web服务安全技术委员...

    ws-security三个jar包

    ISNetworksProvider.jar可能是某个特定厂商提供的WS-Security实现或者一个特定的安全提供者,可能包含了对WS-Security规范的某些特定功能的支持,例如证书管理或特定加密算法的实现。 tsik.jar文件名暗示了它可能是...

    ws-security java-mail

    在SOAP消息中,`ws-security` 可以添加数字签名、加密、时间戳等元素,确保数据在传输过程中的安全。例如,`ws-security` 可以通过X.509证书进行公钥基础设施(PKI)的认证,也可以使用UsernameToken或 Kerberos ...

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

    为了实现WS-Security,开发者需要理解XML、XML Schema、SOAP以及相关加密和签名标准。同时,需要熟悉如何配置和使用提供的库,以便正确地设置身份验证、完整性检查和保密性措施。 总的来说,WS-Security是Web服务...

    Cxf 和wss4j实现ws-security的demo

    CXF使用WSS4J实现WS-Security规范,本例的配置是Timestamp Signature Encrypt,具体使用可以参考我的博客http://blog.csdn.net/wangchsh2008/article/details/6708270

    CXF开发所需jar包

    对于需要安全性的Web服务,如WS-Security,CXF提供了相应的jar包,如`cxf-rt-ws-security.jar`,包含了加密、签名、认证等安全功能。 6. **数据绑定和对象映射**: CXF支持多种数据绑定技术,如JAXB(Java ...

    WS-Security构筑安全的SOAP消息调用

    WS-Security的实现通常依赖于支持该规范的开发工具和技术栈,常见的实现包括但不限于: 1. **Apache WSS4J**:Apache项目下的一个开源库,用于Java应用程序中的WS-Security实现。 2. **Spring Security**:Spring...

    apache-cxf-2.6.1-src

    7. **安全机制**:CXF提供安全特性,包括基于证书的SSL/TLS加密、WS-Security标准实现,支持基本认证、digest认证、OAuth等。 在"apache-cxf-2.6.1-src"中,开发者可以找到以下文件和目录: - **cxf**: 这是CXF的...

    cxf-2.7.18

    1. **服务实现与调用**:CXF提供了两种方式来实现Web服务,即JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)。开发者可以通过注解或者XML配置文件轻松地将Java类绑定到Web...

    apache-cxf-2.7.6.rar

    4. **安全特性**:CXF内置了对WS-Security(Web Services Security)的支持,包括消息认证、加密和数字签名等,确保Web服务的安全通信。 5. **工具集**:CXF提供了一套强大的工具,如wsdl2java用于从WSDL生成Java...

    Cxf客户端及服务器端,实现客户端和服务器端的权限验证

    我们将重点讨论基本认证和WS-Security这两种常见的实现方式。 1. **基本认证**: 基本认证是最简单的HTTP身份验证形式,它涉及将用户名和密码编码为Base64字符串并在HTTP请求头中传递。在CXF中,可以通过配置...

    apache-cxf-3.2.1-src.tar.gz

    5. **WS-Security**:通过CXF,你可以实现Web服务的安全性,包括数字签名、加密和身份验证,符合WS-Security标准。 6. **Transport and Bindings**:CXF支持多种传输方式,如HTTP、HTTPS、JMS等,以及多种绑定机制...

    apache-cxf-2.2.1可下载

    5. **消息级安全**:CXF提供了强大的安全特性,包括基于WS-Security的安全策略,可以实现用户身份验证、消息完整性检查以及加密等功能。 6. **动态客户端**:CXF的动态客户端API允许开发者在运行时动态创建和调用...

Global site tag (gtag.js) - Google Analytics