繁体   English   中英

WSHttpBinding:消息加密中的Entropy.BinarySecret角色

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM