在Spring-WS的xws-security中支持X509PKIPathv1
我试图发送请求到现有的web服务。 这个webservice不受我的pipe辖。 这个webservice的安全策略要求我在我的SOAP请求中发送完整的证书链。 我的证书链包含3个证书。 证书链的设置没有问题,因为我能够testing它的有效性(并且已经这样做)。
这个设置的安全configuration(=在请求中发送完整的证书链)是:
<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安全有两种口味:
<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中应用我的XWSSconfiguration是在一个名为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
的源代码。 尽pipe我的努力,我还没有findcom.sun.xml.wsit.xws-security-1.3.1
的源代码。 不过我相信代码是一样的。 我试过这两个库,都给我同样的例外。 我试了一下,使用默认的spring-ws-security并对两个库(每次一个)使用显式依赖声明。
我的问题:
- 有没有人能够使用xws-security来生成X509签名,其中valueType是X509PKIPathv1,而keyReferenceType是Direct?
- 其他xws安全实现存在,提供这个? 或者我应该看看像Wss4j完全不同的方法?
我曾考虑过重写BinarySecurityToken,但这也可能意味着在DSIG中重写SignatureProcessor的X509签名。
有趣的问题,你到了那里。
据我所知,在Google-fu中,在某些项目(例如Oracle的XMLSec或Open SAML )中存在对#X509PKIPathv1的支持,但它并不普遍,甚至像Soap UI 这样的应用程序也不支持 SOAP- WS。
不仅如此,其他语言/框架也缺乏支持,如Delphi和.NET , IBM JRE 。
你可以做什么,基于这个SO特别是这个SO实现你自己的WebServiceTemplate / WebServiceMessageSender。
valueType可以是#X509v3,#X509PKIPathv1
这是在这里findXWS-SecurityIntro4你是否尝试过这些值,而不是一个URL?