WS-Security Interoperability Issues: WebSphere, JBoss, Axis and .Net

news/2024/12/13 16:31:46/

检验了一下WS-Security的互操作情况,涉及到了4种WSS开发包:Websphere Web Services 1.0, JBossWS 1.0.2, WSS4J 1.5.0, WSE 3.0. 总体来说,JBossWS是功能最弱的一种,但配置最简单,Websphere Web Services是功能最强的一种,但配置最复杂;WSS4J和WSE介于两者之间

问题一:客户端用Websphere Web Services,服务端用JBossWS,使用UsernameToken时,<wsse:UsernameToken>缺了wsu:Id属性,JBoss会用异常来抱怨:

  <wsse:UsernameToken xmlns:wsse="...">

  <wsse:Username xmlns:wsse="...">ibm</wsse:Username>

  <wsse:Password Type="..." xmlns:wsse="...">was</wsse:Password>

  </wsse:UsernameToken>

org.jboss.ws.wsse.WSSecurityException: Invalid message, UsernameToken is missing an id at org.jboss.ws.wsse.element.UsernameToken.<init>(UsernameToken.java:60)

除Websphere Web Services外,其它3种开发包缺省都会为<wsse:UsernameToken>提供wsu:Id属性,除了JBossWS外,其它3种开发包都能处理<wsse:UsernameToken>不带wsu:Id属性的情况

 

问题二:客户端用Websphere Web Services,服务端用JBossWS,使用加密时,<EncryptionMethod>缺了显式的XML namespace 声明,JBoss会用异常来抱怨:

<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">

<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />....<..>

</EncryptedKey>

<EncryptedData Id="wssecurity_encryption_id_3" Type="http://www.w3.org/2001/04/xmlenc#Content" xmlns="http://www.w3.org/2001/04/xmlenc#">

  <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />....<..>

</EncryptedData>

org.jboss.ws.WSException: Content root name does not match element name: EncryptionMethod != {http://www.w3.org/2001/04/xmlenc#}EncryptionMethod at org.jboss.ws.soap.SOAPContentElement.expandToDOM(SOAPContentElement.java:818)

来看一下完整正确的SOAP片断(显式声明的xml名称空间):

<xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">

  <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" />...<...>..

</xenc:EncryptedKey>

<xenc:EncryptedData Id="..." Type="http://www.w3.org/2001/04/xmlenc#Content" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">

  <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" />..<..>..

</xenc:EncryptedData>

除Websphere Web Services外,其它3种开发包缺省都会为<EncryptionMethod>提供显式的名称空间声明,除了JBossWS外,其它3种开发包都能处理<EncryptionMethod> without explicit namespace

 

问题三:JBossWS只支持DirectReference或说StraightReference的SecurityTokenReference,不支持KeyID, KeyName, X509Issuer, Embeded等方式,所以同时应用签名和加密的时候,就会出现两个<BinarySecurityToken>,这样另一方尤其是 .Net WSE就会晕菜了:<Header>中有两个Token,但是只期待一个

当然,这是通过WSE Tools选择了Certificate认证模式的结果,如果选择Anonymous,.Net会正确的处理带有多个BinarySecurityToken的SOAP请求,只不过Anonymous模式会掺杂进WSS1.1的特性:它产生的导致JBossWS晕菜的Response是这样的:

  <wsse:SecurityTokenReference xmlns:wsse="..">

  <wsse:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#EncryptedKeySHA1" EncodingType="...">6LW6sXwrPX0SSBM4nV7OqgjUiv8=</wsse:KeyIdentifier>

  </wsse:SecurityTokenReference>

WS-I Basic Profile 1.0 是不支持WSS1.1的

 

问题四:JBossWS和Websphere Web Services不支持UsernameToken的PasswordDigest方式,只支持PasswordText

  <!--晕菜-->

  <wsse:UsernameToken xmlns:wsu="..." wsu:Id="UsernameToken-5525185">

  <wsse:Username>wss4juser</wsse:Username>

  <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">WhTMH9PlZsmxrwDRkjgzbxPtZgM=</wsse:Password>

  </wsse:UsernameToken>

  <!--OK-->

  <wsse:UsernameToken xmlns:wsu="..." wsu:Id="UsernameToken-5525185">

  <wsse:Username>wss4juser</wsse:Username>

  <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">wss4jpass</wsse:Password>

  </wsse:UsernameToken>

 

问题五:WSS4J不支持同时使用UsernameToken和Signature,如果UsernameToken的user和用于签名的X509Cert的subject不同的话

因为action="UsernameToken" 和 action="Signature" 使用相同的<parameter name="user" value="username.or.subject"/>来配置username或者subject;这是有理由的,因为UsernameToken和Signature都是用来表明自己身份的,当然Signature主要是校验SOAP消息没有被篡改;通常UsernameToken会和Encryption联合使用,或者Signature和Encryption同时使用;无论如何,这是WSS4J的一个缺陷


http://www.ppmy.cn/news/422070.html

相关文章

js ws 状态_使用ws

要使用WebSocket,关键在于服务器端支持,这样,我们才有可能用支持WebSocket的浏览器使用WebSocket。 ws模块 在Node.js中,使用最广泛的WebSocket模块是ws,我们创建一个hello-ws的VS Code工程,然后在package.json中添加ws的依赖: "dependencies": {"ws&quo…

WS-Addressing

为了让 SOA 的应用能够更加的成熟&#xff0c;一些标准化组织 ( 主要有 W3C &#xff0c; OASIS) 对 Web Services 的功能进行了扩展&#xff0c;为此制定了一系列的 WS-* 规范。通过这些规范&#xff0c;使得 Web Services 在实际应用中的能力得到了很大的增强&#xff0c;这些…

WebSphere8 批量安装和制作介质服务器

WAS 8.5 介质准备 1、安装install manager 2、安装IBM Packaging Utility unzip pu.offering.disk.linux_1.5.3000.20120531_2025.zip cd disk_linux/InstallerImage_linux ./consoleinst.sh 跟着向导安装。 3、安装PU mkdir pu cd pu unzip ../pu_1.5.3.zip ./imcl i…

WS-Security

http://www.blogjava.net/openssl/archive/2006/08/08/xfire_wss4j.html

使用WS-*协议

其他Microsoft分布式技术可以使用而WCF不能使用的WS-*规范并不多。WCF理解WS-*规范的架构&#xff0c;这些规范可以定义处理安全性、可靠性和事务的方式。为了获得这个功能&#xff0c;以前的许多开发人员转而使用WSE。图32-1显示了WCF依赖的体系结构。 &#xff08;点击查看大…

WSAIoctl

int WSAAPI WSAIoctl(SOCKET s,//一个套接口的句柄。 DWORD dwIoControlCode,//将进行的操作的控制代码 LPVOID lpvInBuffer, //输入缓冲区的地址 DWORD cbInBuffer,//输出缓冲区的地址 LPVOID lpvOutBuffer, //输入缓冲区的大小 DWORD cbOutBuffer, //输出缓冲区的大小 …

WSE(Web Services Enhancements)

WSE(Web Services Enhancements)是微软为了使开发者通过.NET创建出更强大&#xff0c;更好用的Web Services而推出功能增强插件。现在最新的版本是WSE2.0(SP2).本文描述了如何使用WSE2.0中的安全功能增强部分来实现安全的Web Services。WSE的安全功能增强实现的是WS-Security标…

Swaks

Swaks是由John Jetmore编写和维护的一种功能强大&#xff0c;灵活&#xff0c;可脚本化&#xff0c;面向事务的SMTP测试工具。可向任意目标发送任意内容的邮件。 关于名字 “swaks”这个名字是”SWiss Army Knife Smtp”的首字母缩略词. 发布网站http://www.jetmore.org/joh…