我有一个WCF服务和一个桌面客户端。我使用net.tcp绑定。我有自己的身份验证方法,但我希望邮件加密。所以我在双方都安装了相同的证书。我的配置如下:
<endpointBehaviors>
<behavior name="CustomBehavior">
<clientCredentials>
<clientCertificate storeLocation="CurrentUser" storeName="Root" findValue="myCertificateIssuer" x509FindType="FindByIssuerName" />
</clientCredentials>
</behavior>
</endpointBehaviors>
...
<binding name="simpleTCP" closeTimeout="00:10:00" openTimeout="00:10:00"
sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" >
<security mode="None">
<message clientCredentialType="Certificate"/>
</security>
</binding>
我在服务器上也有相同的配置。解决方案正在运行,但我不知道它是否真正加密了消息。我是否正确地认为,此配置会关闭默认身份验证,但仍会对通道进行加密?
提前致谢
答案 0 :(得分:1)
初步回复的详细说明
如果您要加密频道,请为传输级加密使用类似此类的绑定:
<bindings>
<netTcpBinding>
<binding name="TestTcp">
<security mode="Transport"> <!-- Channel -->
<transport clientCredentialType="Certificate" protectionLevel="EncryptAndSign" />
</security>
</binding>
</netTcpBinding>
</bindings>
要加密消息,请为消息级加密使用类似此类的绑定:
<bindings>
<netTcpBinding>
<binding name="TestTcp">
<security mode="Message"> <!-- Message -->
<message clientCredentialType="Certificate" algorithmSuite="Default" />
</security>
</binding>
</netTcpBinding>
</bindings>
您会注意到<security/>
下方的节点可以是<message/>
或<transport/>
,该节点应与您选择的mode
匹配。设置为clientCredentialType
的{{1}}使用您的服务证书进行加密。
&#34; [使用netTcpBinding加密频道],使用Windows身份验证时,绑定使用服务的Windows令牌来提供消息保护。使用非Windows身份验证(如证书身份验证)时,必须将服务证书配置为服务凭据。绑定使用服务证书进行消息保护。&#34;
&#34; [加密邮件]使用Windows身份验证时,邮件安全性使用服务的Windows令牌来提供邮件安全性。使用非Windows身份验证(如用户名,证书或问题令牌身份验证)时,必须将服务证书配置为服务凭据。邮件安全性使用服务证书进行邮件保护。&#34;
希望涵盖所有基础并让您使用该x.509证书加密您的消息或频道。