[英]WSHttpBinding: Entropy.BinarySecret role in message encryption
我正在用Python编写一个简单的SOAP客户端应用程序。
WSDL文件可在以下位置找到: https : //clients.nationalmailing.com.au/ServiceTest/OrderService.svc?wsdl
不幸的是,服务器在其WSDL文件中声明了wsHttpBinding
用法,我不得不了解它给非.NET开发人员带来了多少麻烦。
我有工作的C#代码(那里很简单),并使用Fiddler捕获流量并分析消息。 现在我知道要遵循的结构。 客户端发送2条后续消息。
我设法创建并发送了第一个请求,并从服务器收到了响应。 但是第二个请求是一种更复杂的方法。 我发现了一个库signxml ,它帮助我用应该显示的所有字段(根据捕获的流量)创建<Signature>
结构。
但是服务器继续回答“错误500:验证消息的安全性时发生错误”。
我意识到,在第一条消息中,我仅将随机值用于以下结构:
<s:Body>
<trust:RequestSecurityToken xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
<trust:TokenType>http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512/sct</trust:TokenType>
<trust:RequestType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue</trust:RequestType>
<trust:Entropy>
<trust:BinarySecret
u:Id="uuid-0649fd7a-9ae2-4f9f-964c-e3aa5d68e8cd-1"
Type="http://docs.oasis-open.org/ws-sx/ws-trust/200512/Nonce">h/MaeQVSL5Br30Hnt/SAl274flYfZVZyx2Fri9zNuEY=</trust:BinarySecret>
</trust:Entropy>
<trust:KeySize>256</trust:KeySize>
</trust:RequestSecurityToken>
</s:Body>
BinarySecret
的值只是一个用Base64编码的随机字符串 。 我认为这是现阶段的问题。 我也没有使用服务器响应中的相同参数。
谁能解释我应该如何使用Entropy.BinarySecret
它应该参与Signature
的计算以及如何使用吗?
回答我自己的问题。 是的,问题在于Entropy
参数使用不当。
要对消息进行签名,您需要生成一个密钥,它由两部分组成(客户端熵和服务器熵)。 它们与P_SHA1
算法结合在一起成为密钥。
对于以后找到这篇文章的任何人:对于Python,请查看signxml
库和ws-trust spec的第4节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.