在 xws-security for Spring-WS 中支持 X509PKIPathv1
Posted
技术标签:
【中文标题】在 xws-security for Spring-WS 中支持 X509PKIPathv1【英文标题】:Support for X509PKIPathv1 in xws-security for Spring-WS 【发布时间】:2012-09-17 18:32:57 【问题描述】:我正在尝试向现有网络服务发送请求。该网络服务不受我管辖。此 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(以及其他)。但是,正如这个 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 并使用两个库的显式依赖声明(一次一个)。
我的问题:
-
是否有人能够使用 xws-security 生成 X509 签名,其 valueType 为 X509PKIPathv1,keyReferenceType 为 Direct?
是否存在其他提供此功能的 xws-security 实现?还是我应该看看像 Wss4j 这样完全不同的方法?
我考虑过重写 BinarySecurityToken,但这也可能意味着在 DSIG 中重写 SignatureProcessor 的 X509 签名。
【问题讨论】:
不清楚,需要自学发现 【参考方案1】:你遇到了有趣的问题。
据我的 Google-fu 所知,在某些项目中存在对#X509PKIPathv1 的支持(例如,Oracle's XMLSec 或 Open SAML),但它并不普遍,甚至像 Soap UI don't support it 这样的应用程序也不广泛用于 SOAP-WS。
不仅如此,其他语言/框架也同样缺乏支持,例如 Delphi 和 .NET、IBM JRE。
基于this SO,尤其是this SO,您可以做的是实现您自己的WebServiceTemplate / WebServiceMessageSender。
【讨论】:
没错,我花了很长时间寻找一种让.NET 生成X509PKIPathV1 的方法,在这个页面中他们非常清楚不兼容的问题。 msdn.microsoft.com/es-es/library/bb885188(v=vs.110).aspx "WSS X509 令牌配置文件 1.0 和 1.1 还将 #X509PKIPathv1 和 #PKCS7 定义为值类型。WCF 不支持这些类型。"【参考方案2】:valueType 可以是#X509v3、#X509PKIPathv1
可以在这里找到 XWS-SecurityIntro4 您是否专门尝试过这些值而不是 URL?
【讨论】:
文档(和 JavaDoc)声明.. setter 显然没有。【参考方案3】:此pull request 将启用使用 X509PKIPathv1 的能力。
【讨论】:
以上是关于在 xws-security for Spring-WS 中支持 X509PKIPathv1的主要内容,如果未能解决你的问题,请参考以下文章
Fighting For Interview 1 : Spring
在Spring REST Controller中使用Jackson Deserialization for DateTime
在 MongoDB for Spring 中的 @DBref 列表项中查找/删除
mvn打包spring工程成jar时报Unable to locate Spring NamespaceHandler for XML schema namespace错误解决办法