在Spring-WS的xws-security中支持X509PKIPathv1

时间:2012-09-26 07:19:46

标签: java spring spring-ws x509

我正在尝试向现有的Web服务发送请求。此网络服务不受我的约束。此Web服务的安全策略要求我在SOAP请求中发送完整的证书链。我的证书链包含3个证书。证书链的设置没有问题,因为我能够测试它的有效性(并且已经这样做了)。

此设置的安全配置(=在请求中发送完整的证书链)是:

<xwss:Sign id="signature">
   <xwss:X509Token 
        certificateAlias="alias" 
        keyReferenceType="Direct"
        valueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1" />
</xwss:Sign>

我正试图通过Spring-WS实现这一目标。 Spring-WS使用spring-ws-security来保证安全性。 Spring-ws-security代表xws-security。

    <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-ws-security</artifactId>
        <version>2.1.0.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.ws.security</groupId>
                <artifactId>wss4j</artifactId>
            </exclusion>            
            <exclusion>
                <groupId>com.sun.xml.wsit</groupId>
                <artifactId>xws-security</artifactId>
            </exclusion>            
        </exclusions>
     </dependency>

Xws-security有两种版本:

    <dependency>
        <groupId>com.sun.xml.wsit</groupId>
        <artifactId>xws-security</artifactId>
        <version>1.3.1</version>
    </dependency>

    <dependency>
        <groupId>com.sun.xml.wss</groupId>
        <artifactId>xws-security</artifactId>
        <version>3.0</version>
    </dependency>

第一个由Spring WS Security使用。第二个是遗产。

在xws-security中应用我的XWSS配置是在名为BinarySecurityToken的类中完成的。 BinarySecurityToken有一个名为

的字段
valueType

valueType的JavaDoc表示它支持X509PKIPathv1(以及其他)。但是,正如这个二传手所说的那样,它没有:

    protected void setValueType(String valueType) {
    if (!(MessageConstants.X509v3_NS.equals(valueType)||MessageConstants.X509v1_NS.equals(valueType))) { 
        log.log(Level.SEVERE,"WSS0342.valtype.invalid");
        throw new RuntimeException("Unsupported value type: " + valueType);
    }
    this.valueType = valueType;
}

类MessageConstants(甚至)没有X509PKIPathv1的静态。当我运行我的代码时,我得到了预期的结果:

Unsupported value type: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1

我能够查看遗留com.sun.xml.wss.xws-security:3.0的源代码。尽管我付出了努力,但我还没有找到com.sun.xml.wsit.xws-security-1.3.1的源代码。不过我相信代码是一样的。我尝试了两个库,两者都给了我相同的例外。我尝试了它,使用默认的spring-ws-security并对两个库使用显式依赖声明(一次一个)。

我的问题:

  1. 有没有人能够使用xws-security生成值为X509PKIPathv1的X509签名和一个直接的keyReferenceType?
  2. 是否存在提供此功能的其他xws-security实现?或者我应该看一下像Wss4j这样完全不同的方法?
  3. 我考虑过重写BinarySecurityToken,但这可能也意味着重写了DSIG中签名处理器的X509签名。

3 个答案:

答案 0 :(得分:3)

你到那里有趣的问题。

据我所知,我的Google-fu在一些项目中存在对#X509PKIPathv1的支持(例如Oracle's XMLSecOpen SAML),但它并不普及甚至像Soap这样的应用程序SOAP-WS的UI don't support it

不仅如此,其他语言/框架也缺乏支持,例如Delphi.NETIBM JRE

基于this SO,尤其是this SO,你可以做的是实现自己的WebServiceTemplate / WebServiceMessageSender。

答案 1 :(得分:0)

  

valueType可以是#X509v3,#X509PKIPathv1

这是在这里找到的 XWS-SecurityIntro4 您是否专门而不是URL尝试了这些值?

答案 2 :(得分:0)

pull request将启用使用X509PKIPathv1的功能。