C# 如何使用WCF签署SOAP请求
我有一个第三方SOAP web服务。我需要调用它的一个方法。请求需要签名。如何对请求进行签名?我认为签名意味着您使用安装在客户端的证书对消息进行签名 在WCF中这样做相对容易。假设您正在中使用,则必须将模式设置为。您还必须将设置为 然后,您必须设置端点行为并配置(它是的子项)以指示客户端证书存储的位置 即使您不使用wsHttpBinding,当您希望使用客户端证书来提供消息级安全性时,大多数其他绑定的配置也几乎相同C# 如何使用WCF签署SOAP请求,c#,.net,wcf,.net-3.5,C#,.net,Wcf,.net 3.5,我有一个第三方SOAP web服务。我需要调用它的一个方法。请求需要签名。如何对请求进行签名?我认为签名意味着您使用安装在客户端的证书对消息进行签名 在WCF中这样做相对容易。假设您正在中使用,则必须将模式设置为。您还必须将设置为 然后,您必须设置端点行为并配置(它是的子项)以指示客户端证书存储的位置 即使您不使用wsHttpBinding,当您希望使用客户端证书来提供消息级安全性时,大多数其他绑定的配置也几乎相同 如果您是通过HTTPS进行呼叫,请注意,您必须将安全元素上的mode属性设置为m
如果您是通过HTTPS进行呼叫,请注意,您必须将安全元素上的mode属性设置为mode.TransportWithMessageCredential。以下是有关使用WCF使用需要签名的Amazon SOAP服务的问题。我认为答案给出了一个很好的例子,这可能有助于你的情况
编辑:很明显,关于这个问题的链接有些混乱。我想指出投票率最高的答案。这绝对是一个WCF解决方案。您将注意到从IClientMessageInspector(一个WCF接口)继承的类SigningMessageInspector。我认为本节可能会对您有所帮助。基于@casperOne的非常有用的答案,我最终得出以下配置:
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
</startup>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding>
<security mode="TransportWithMessageCredential">
<message clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<!-- specifies the endpoint to use when calling the service -->
<endpoint address="https://SomeEndPointUrl/v1"
binding="wsHttpBinding"
behaviorConfiguration="SigningCallback"
contract="ServiceReference1.EboxMessagePortType" name="MyBindingConfig">
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="SigningCallback">
<clientCredentials>
<clientCertificate findValue="*somecertsubjectname*"
storeLocation="LocalMachine"
storeName="TrustedPublisher"
x509FindType="FindBySubjectName"
/>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
这对于https上的soap客户端来说也不适用于WCF。@casperOne-根据Tim的链接,一个大的答案是“我最终更新了代码以使用WCF…”。为什么不使用WCF?@Tim C:在你发布链接时,唯一的答案是:它肯定没有WCF解决方案。你是对的,我说的是用发出请求的机器上的证书对请求进行签名。我使用的是basicHttpBinding,因为默认情况下,该实用程序会生成它,我将它切换到wsHttpBinding,只是在web.config中替换了它。当我发出请求时,我得到了一个错误:“请求被中止:无法创建SSL/TLS安全通道。”@Bell先生:您应该能够使用相同的属性在basicHttpBinding上设置安全模式。当我查看正在发出的原始请求(来自跟踪文件)时,它没有提到任何关于签名的内容