WS-Security的。服务器响应加密。以dinamically方式选择encryptionUser

时间:2016-01-01 23:25:25

标签: cxf ws-security

我目前正在研究WS-Security并使用CXF构建一个带有签名和加密操作的基本示例。我设置客户端和服务器分别对请求和响应进行签名和加密。

我使用Spring配置服务器。这是配置:

<context:component-scan base-package="com.jfjp.ws" />
<bean id="passwordCallback"  class="com.jfjp.ws.service.ServerPasswordCallback" />
<jaxws:endpoint id="greetServiceWS" implementor="#greetService" address="/Greeting">

    <jaxws:inInterceptors>
        <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
            <constructor-arg>
                <map>
                    <entry key="action" value="UsernameToken Signature Encrypt"/>
                    <entry key="signaturePropFile" value="server_signverf.properties"/>
                    <entry key="decryptionPropFile" value="server_decrypt.properties"/>
                    <entry key="encryptionKeyIdentifier" value="password"/>
                    <entry key="passwordCallbackRef">
                        <ref bean="passwordCallback"/>
                    </entry>
                </map>
            </constructor-arg>
        </bean>
        <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>

    </jaxws:inInterceptors>
    <jaxws:outInterceptors>
        <bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
            <constructor-arg>
                <map>
                    <entry key="action" value="Signature Encrypt"/>
                    <entry key="user" value="server"/>
                    <entry key="signaturePropFile" value="server_sign.properties"/>
                    <entry key="encryptionPropFile" value="server_encrypt.properties"/>
                    <entry key="encryptionUser" value="client"/>
                    <entry key="passwordCallbackRef">
                        <ref bean="passwordCallback"/>
                    </entry>
                </map>
            </constructor-arg>
        </bean>
        <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
    </jaxws:outInterceptors>
</jaxws:endpoint>

要加密响应,我需要知道客户端的公钥,我这样做是通过使用客户端证书别名设置encryptionUser的值。但如果我这样做,我只能有一个客户。

如果我为每个客户端使用一个端点,我可以配置多个客户端。这是正确的方法吗?

我可以动态设置encryptionUser的值吗?

1 个答案:

答案 0 :(得分:0)

是。对于此场景,“encryptionUser”有一个特殊值 - &gt; “useReqSigCert”。它使用客户端签名证书来加密对客户端的响应。

见这里:http://ws.apache.org/wss4j/config.html