我需要实现一个jax-ws客户端。
以下是提供商文档关于安全性的说法
目前,我们使用SOAP Message Security 1.0版规范 http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf
本标准使用W3C规范中的另外两个:
XMLENC(http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/)
和XMLDSIG(http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/)对于签名,使用直接的“SecurityTokenReference” 指定X509的“URI”和“valueType”的“reference”是强制性的。对于 加密,我们也推荐它,但我们也按顺序支持 preference是对keyIdentifier,X509IssuerSerial或a的引用 键名。
加密和签名的块必须是“body”标记。
我们建议使用:“rsa-sha1”用于签名,“rsa-1_5”用于 加密密钥和“tripledes-cbc”用于加密正文。
所以我提出了以下政策(从netbeans生成)。但是......我看起来并不合适。 Web服务尚无法访问,但我不确定规范版本是否匹配。我在这个问题上看了很多,但我仍然有些困惑。这个政策看起来不错吗?
<wsp1:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoapPolicy">
<wsp1:ExactlyOne>
<wsp1:All>
<sp:TransportBinding>
<wsp1:Policy>
<sp:TransportToken>
<wsp1:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp1:Policy>
</sp:TransportToken>
<sp:Layout>
<wsp1:Policy>
<sp:Lax/>
</wsp1:Policy>
</sp:Layout>
<sp:AlgorithmSuite>
<wsp1:Policy>
<sp:TripleDesRsa15/>
</wsp1:Policy>
</sp:AlgorithmSuite>
</wsp1:Policy>
</sp:TransportBinding>
<sp:Wss10/>
<sp:EndorsingSupportingTokens>
<wsp1:Policy>
<sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
<wsp1:Policy>
<sp:WssX509V3Token10/>
</wsp1:Policy>
</sp:X509Token>
</wsp1:Policy>
</sp:EndorsingSupportingTokens>
</wsp1:All>
</wsp1:ExactlyOne>
</wsp1:Policy>
<wsp:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoap_perform_Input_Policy">
<wsp:ExactlyOne>
<wsp:All>
<sp1:SignedEncryptedSupportingTokens>
<wsp:Policy>
<sp1:X509Token sp1:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp1:WssX509V3Token10/>
</wsp:Policy>
</sp1:X509Token>
</wsp:Policy>
</sp1:SignedEncryptedSupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
编辑: 我无法通过wsit发送预期的消息。例如,使用Netbeans向导,如果不使用寻址,我无法获得加密的标头。这应该是可能的吗?
我用一个旧的轴1类和wss4j攻击了一些东西,它有效,但它很难看,而且我宁愿使用更具前瞻性的东西。
答案 0 :(得分:1)
也许您想尝试使用CXF而不是WSIT? http://cxf.apache.org/docs/ws-security.html
答案 1 :(得分:1)
此外,由于您具有传输绑定,这意味着整个正文将通过传输协议(https)进行加密。您无需明确指定主体加密。实际上,这个绑定将加密除http头之外的所有内容。
传输绑定确实是获取安全Web服务的最简单方法。如果您想要完全控制,则必须根据需要编写自己的对称或不对称绑定。 Asymetric更复杂,因为它需要双方都有证书,而不对称只需要服务器证书(接受匿名客户端)。不对称和对称绑定需要小心。它们的设计非常灵活,可以让您设计任何策略,即使容易受到某些攻击。
当不使用传输绑定时,则必须指定必须加密的主体。如规格中所述:
sp:EncryptedParts/sp:Body
或翻译成xml:
<sp:EncryptedParts>
<sp:Body/>
</sp:EncryptedParts>
同样,如果你想要签署正文:
<sp:SignedParts>
<sp:Body/>
</sp:SignedParts>
还有更多选项可以指定签名/加密顺序,是否加密签名等等。
顾名思义,sp:EndorsingSupportingToken等策略适用于支持令牌。我熟悉的类型是您可以包含在Web服务请求中的用户名令牌。
WS-SecurityPolicy specification是我读过的用于理解政策的最有用的单一文档。你应该花些时间仔细阅读。它详细介绍了一些内容并包含了有用的示例。阅读不同版本的文档是很好的,因为在最近的版本中会更好地记录某些方面。注意我链接了v1.3。
设置Web服务客户端和服务器并编写简单的测试。特别是如果您不熟悉Web服务。
一种可以帮助您快速制定政策的工具是SoapUI。它并不完全支持我所需要的东西,但它帮助我学到了很多东西。它有一个很棒的用户界面,并不是很难使用。
获取一些示例或构建一些示例,然后在规范的帮助下解构它们。
我发现政策非常复杂。准备好吸收很多概念!