我需要实现一个jax-ws客户端。
以下是供应商文档中关于安全性的说明
目前,我们使用SOAP消息安全性规范版本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”并直接指定“URI”和“valueType”为X509的方式。对于加密,我们也建议这样做,但也支持以keyIdentifier、X509IssuerSerial或keyName为优先顺序进行引用。
加密和签名块必须是“body”标签。
我们建议使用:“rsa-sha1”进行签名,“rsa-1_5”进行加密密钥,“tripledes-cbc”进行加密体。
因此,我想到了以下策略(从NetBeans生成)。但是… 它看起来对我来说不正确。WebService尚未可达,但我不确定规范版本是否匹配。我阅读了很多相关资料,但仍有点困惑。这个策略看起来可以吗?
<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-yet发送预期的消息。例如,使用Netbeans向导,我无法在不使用寻址的情况下获得加密标头。这应该是可能的吗?
我用旧的axis 1类和wss4j做了一些hack,它可以工作但很丑陋,我宁愿使用更为未来化的东西。