如何将DigestMethod设置为Sha 256 WCF?

时间:2013-09-18 16:50:52

标签: algorithm wcf security sha

我正在使用WCF编写客户端,我需要将signaturemethod算法设置为rsa-sha1,将DigestMethod设置为sha256。 SecurityAlgorithmSuite中的任何枚举值都不支持此功能。 所以,我想在我的SOAP请求中使用它:

   <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
   <ds:Reference URI="#TS-25">
   <ds:Transforms>
   <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
   </ds:Transform>
   </ds:Transforms>
   <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>

我的代码:

    Dim asbe As System.ServiceModel.Channels.AsymmetricSecurityBindingElement
    asbe = New System.ServiceModel.Channels.AsymmetricSecurityBindingElement

    asbe.MessageSecurityVersion = _
        MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11

    asbe.InitiatorTokenParameters = New System.ServiceModel.Security.Tokens.X509SecurityTokenParameters(System.ServiceModel.Security.Tokens.X509KeyIdentifierClauseType.Thumbprint, SecurityTokenInclusionMode.AlwaysToRecipient)
    asbe.RecipientTokenParameters = New System.ServiceModel.Security.Tokens.X509SecurityTokenParameters(System.ServiceModel.Security.Tokens.X509KeyIdentifierClauseType.Thumbprint, SecurityTokenInclusionMode.AlwaysToInitiator)


    asbe.MessageProtectionOrder = System.ServiceModel.Security.MessageProtectionOrder.SignBeforeEncrypt

    asbe.SecurityHeaderLayout = System.ServiceModel.Channels.SecurityHeaderLayout.Strict
    asbe.EnableUnsecuredResponse = True 
    asbe.IncludeTimestamp = True 
    asbe.SetKeyDerivation(False)

    asbe.DefaultAlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Basic128Sha256Rsa15

    Dim usernameToken As New UserNameSecurityTokenParameters
    usernameToken.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient
    asbe.EndpointSupportingTokenParameters.Signed.Add(usernameToken)
    asbe.AllowInsecureTransport = True

    Dim myBinding As CustomBinding
    myBinding = New CustomBinding

    myBinding.Elements.Add(asbe)
    myBinding.Elements.Add(New TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8))

    Dim httpsBindingElement As HttpsTransportBindingElement  
    httpsBindingElement = New HttpsTransportBindingElement
    myBinding.Elements.Add(httpsBindingElement)

    Return myBinding

1 个答案:

答案 0 :(得分:1)

要解决此问题,您必须创建一个继承SecurityAlgorithmSuite的自定义类。然后,您可以将可重写方法的默认属性设置为您需要的任何内容。要使用它,而不是:

asbe.DefaultAlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Basic128Sha256Rsa15

你会这样做:

asbe.DefaultAlgorithmSuite = new CustomAlgorithmSuiteclass

然后代理对象上的DefaultAlgorithmSuite属性将包含自定义类中设置的所有默认值。 我没有想到这个信用额度:http://social.msdn.microsoft.com/Forums/vstudio/en-US/8b149878-f9a2-44e3-afd4-68884b02e129/algorithm-suite-wcf-ws-security