我需要使用数字签名连接到Web服务。我正在使用.NET 4.0和WCF(服务参考)和X509 SSL证书,但找不到任何合适的指令来说明如何正确实现目标。
我发现了数百个帖子和博客等关于加密soap消息,签名数据和批次的内容,大量示例使用X509Certificate1,X509Certificate2,X509Certificate3,DSACryptoServiceProvider,RSACryptoServiceProvider,设置配置中的所有内容。 web.config,在代码中设置配置,使用basicHttpBinding或wsHttpBinding,或使用WSE,WSE2,WSE3,ad nauseum。
基本上,我找到了对我来说完全没用的各种信息,因为我还没有找到一个如何简单地将数字签名添加到soap消息的完整示例。
通过阅读数字签名的示例,听起来应该是一个简单的过程,但我找不到一个有用的实现。
有人可以指出我正确的方向吗?
答案 0 :(得分:0)
我认为这取决于WCF绑定中的安全设置。如果您只是在寻找SOAP消息的结构,请使用.NET创建一个客户端,并为该服务打开消息登录。这将记录来回发送的每条消息。我必须这样做一次,并发现WCF使用的数据编码(TLSNego)是专有的,因此非WCF客户端将无法工作。
答案 1 :(得分:0)
有点迟到的答案,但希望这可能有助于在这里降落的人......
使用WCF客户端连接到使用带有数字签名的WS-Security的SOAP服务意味着您必须使用自定义客户端绑定。某些细节可能会因您的服务而异,例如,服务WSDL(或服务提供商可能会告诉您是否无法获取WSDL)可能会定义不同的消息安全版本,但我已使用客户端配置完成此工作像这样:
<bindings>
<customBinding>
<binding name="WSHttpBinding_IService">
<security defaultAlgorithmSuite="Default" authenticationMode="SecureConversation"
requireDerivedKeys="true" includeTimestamp="true" messageProtectionOrder="SignBeforeEncrypt"
messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
requireSignatureConfirmation="false" canRenewSecurityContextToken="true">
<secureConversationBootstrap defaultAlgorithmSuite="Default"
authenticationMode="MutualSslNegotiated" requireDerivedKeys="true"
includeTimestamp="true" messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
requireSignatureConfirmation="false">
<localClientSettings detectReplays="true" />
<localServiceSettings detectReplays="true" />
</secureConversationBootstrap>
<localClientSettings detectReplays="true" />
<localServiceSettings detectReplays="true" />
</security>
<textMessageEncoding />
<httpTransport />
</binding>
</customBinding>
</bindings>