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

48

我正在尝试向一个现有的 Web 服务发送请求。这个 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使用,第二个是遗留的。

将我的XWSS配置应用于xws-security是在一个叫做BinarySecurityToken的类中完成的。BinarySecurityToken有一个叫做的字段

valueType

valueType的JavaDoc表示它支持X509PKIPathv1(以及其他类型)。但是,正如这个setter所述,它实际上并没有支持:

    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生成valueType为X509PKIPathv1且keyReferenceType为Direct的X509签名吗?
  2. 是否存在其他提供此功能的xws-security实现?或者我应该考虑完全不同的方法,比如Wss4j?

我考虑过重写BinarySecurityToken,但这可能也意味着重写DSIG中SignatureProcessor的X509签名。


不够清晰,需要自学和查找。 - Vivek Panday
3个回答

3
有趣的问题。
就我使用谷歌搜索的结果来看,一些项目(例如Oracle's XMLSecOpen SAML)支持#X509PKIPathv1,但是它并不普及,即使像Soap UI这样的应用程序也不支持SOAP-WS。
不仅如此,其他语言/框架也存在相同的支持缺乏问题,例如Delphi.NETIBM JRE
基于this SO和特别是this SO,你可以实现自己的WebServiceTemplate / WebServiceMessageSender。

1
没错,我花了很长时间寻找一种方法让.NET生成X509PKIPathV1,在这个页面上他们非常清楚地说明了不兼容性。 https://msdn.microsoft.com/es-es/library/bb885188(v=vs.110).aspx"WSS X509 Token Profile 1.0和1.1也定义了#X509PKIPathv1和#PKCS7作为值类型。WCF不支持这些类型。" - Ualter Jr.

0

这个拉取请求将使能够使用X509PKIPathv1的功能。


0
valueType 可以是 #X509v3、#X509PKIPathv1。 您可以在此找到它XWS-SecurityIntro4。您是否尝试过使用这些特定值而不是URL呢?

文档(和JavaDoc)说明了...但setter显然没有。 - Bart Blommaerts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接