gpt4 book ai didi

c# - WCF 客户端 - 为 WS-Security Timestamp 签名指定签名算法

转载 作者:太空狗 更新时间:2023-10-29 18:00:14 24 4
gpt4 key购买 nike

我有一个 WCF 客户端正在向非 WCF 服务发送消息,并且该服务在处理用于签署 WS-Security Timestamp 元素的 HMAC-SHA1 签名方法时遇到问题。理想情况下,我们希望使用 RSA-SHA1 签名方法,但我无法让 WCF 使用该签名方法。

我使用的绑定(bind)是自定义绑定(bind),它允许我通过 HTTPS 发送 SAML 2.0 token :

<customBinding>
<!-- This binding is a WS2007FederationHttpBinding without Secure Sessions that uses Text message encoding. -->
<binding
name="WS2007FederationHttpBinding_NoSecureSession_Text"
closeTimeout="00:01:00"
openTimeout="00:01:00"
receiveTimeout="00:10:00"
sendTimeout="00:01:00">
<security
authenticationMode="IssuedTokenOverTransport"
requireSignatureConfirmation="true"
securityHeaderLayout="Lax"
messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
keyEntropyMode="CombinedEntropy"
includeTimestamp="true">
<issuedTokenParameters
tokenType="urn:oasis:names:tc:SAML:2.0:assertion">
<!-- This describes the STS. That is, the URL, the binding to use, and its Identity -->
<issuer
address="http://hostname//STS.svc"
binding="ws2007HttpBinding"
bindingConfiguration="StsUserNameBindingConfiguration">
<identity>
<!-- This is the certificate used for signing on the STS. -->
<!-- Replace "sts-signing-certificate-thumbprint" with the actual thumbprint of the STS's signing certificate -->
<certificateReference
findValue="sts-signing-certificate-thumbprint"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindByThumbprint"/>
</identity>
</issuer>
</issuedTokenParameters>

<!-- This basically says "Don't use Secure Conversation" -->
<secureConversationBootstrap/>
</security>

<!-- Use Text Encoding -->
<textMessageEncoding/>

<!-- This says to use HTTPS when communicating with the remote service -->
<httpsTransport
requireClientCertificate="true"
maxBufferPoolSize="134217728"
maxReceivedMessageSize="134217728"
maxBufferSize="134217728"/>
</binding>
</customBinding>

传出请求中的签名如下所示:

<Signature
xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod
Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1"/>
<Reference
URI="#_0">
<Transforms>
<Transform
Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</Transforms>
<DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>GZfW1RkyS4DHYFPHRnRuqNSo+qE=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>rMzQ/kEV7AXcO3wm9hfQXNoX5r4=</SignatureValue>
<KeyInfo>
<o:SecurityTokenReference
b:TokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0"
xmlns:b="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd">
<o:KeyIdentifier
ValueType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLID">_9f79359e-63dc-4e38-888c-6567dac4b41b</o:KeyIdentifier>
</o:SecurityTokenReference>
</KeyInfo>
</Signature>

注意 <SignatureMethod>http://www.w3.org/2000/09/xmldsig#hmac-sha1

一件有趣的事情是 HMAC-SHA1 算法是对称的(一个 key 用于加密和解密),而 RSA-SHA1 是非对称的(需要一个 key 用于加密和一个用于解密)。我认为 WCF 使用 HMAC-SHA1 算法是因为它是对称的,并且正在交换的 SAML token 是共享 secret ( key )。使用 SAML token 作为对称算法的共享 key 是有意义的,但是是否有一个选项可用于强制 WCF 使用非对称算法(如 RSA-SHA1)?

我已经能够通过更改 binding/security/defaultAlgorithmSuite 属性对签名方法进行一些细微的修改,但是各种选项并没有让我能够在此处指定 RSA-SHA1:

defaultAlgorithm = 默认:

<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1"/> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>

默认算法 = Basic256:

<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1"/> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>

默认算法 = Basic256Rsa15:

<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1"/> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>

默认算法 = Basic256Sha256:

<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#hmac-sha256"/> <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>

默认算法 = Basic256Sha256Rsa15:

<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#hmac-sha256"/> <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>

有没有办法强制 WCF 在时间戳签名上使用 RSA-SHA1?

最佳答案

我认为这是一个互操作性问题。在下面的链接中也有类似的问题。

http://www.fokkog.com/2011/01/ws-security-interoperability-issue.html

您可以手动创建和签署 token 。检查这篇文章:

How to make WCF Client conform to specific WS-Security - sign UsernameToken and SecurityTokenReference

关于c# - WCF 客户端 - 为 WS-Security Timestamp 签名指定签名算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9366397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com