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

2022-08-31 22:36:46

我正在尝试向现有 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-securitys 委托给 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 有 2 种类型:

    <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

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

我的问题:

  1. 有没有人能够使用 xws-security 生成值类型为 X509PKIPathv1 和密钥引用类型为 Direct 的 X509 签名?
  2. 是否存在提供此功能的其他 xws 安全实现?或者我应该看看一种完全不同的方法,比如Wss4j?

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


答案 1

有趣的问题,你到了那里。

据我所知,在我的Google-fu中,在某些项目(例如,Oracle的XMLSecOpen SAML)中存在对#X509PKIPathv1的支持,但是它并不普遍,甚至像Soap UI这样的应用程序也不支持SOAP-WS

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

你可以做的,基于这个SO,特别是这个SO,是实现你自己的WebServiceTemplate / WebServiceMessageSender。


答案 2

值类型可以#X509v3,#X509PKIPathv1

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


推荐