WCF net.tcp绑定基于证书的消息安全性但安全模式已关闭

时间:2015-10-23 01:27:51

标签: c# wcf encryption tcp certificate

我有一个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>

我在服务器上也有相同的配置。解决方案正在运行,但我不知道它是否真正加密了消息。我是否正确地认为,此配置会关闭默认身份验证,但仍会对通道进行加密?

提前致谢

1 个答案:

答案 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;

     

https://msdn.microsoft.com/en-us/library/ff648863.aspxhttps://msdn.microsoft.com/en-us/library/ff648863.aspx

希望涵盖所有基础并让您使用该x.509证书加密您的消息或频道。