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

C# WCF net.tcp绑定具有基于证书的消息安全性,但安全模式已关闭,c#,wcf,encryption,tcp,certificate,C#,Wcf,Encryption,Tcp,Certificate,我有一个WCF服务和一个桌面客户端。我使用net.tcp绑定。我有自己的身份验证方法,但是我希望对消息进行加密。所以我在双方都安装了相同的证书。我的配置如下: <endpointBehaviors> <behavior name="CustomBehavior"> <clientCredentials> <clientCertificate storeLocation="CurrentUser" storeName="

我有一个WCF服务和一个桌面客户端。我使用net.tcp绑定。我有自己的身份验证方法,但是我希望对消息进行加密。所以我在双方都安装了相同的证书。我的配置如下:

<endpointBehaviors>
   <behavior name="CustomBehavior">
      <clientCredentials>
         <clientCertificate storeLocation="CurrentUser" storeName="Root" findValue="myCertificateIssuer" x509FindType="FindByIssuerName" />
      </clientCredentials>
   </behavior>
</endpointBehaviors>

。。。


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


提前感谢

关于初始响应的详细说明

如果要加密通道,请使用类似以下内容的绑定进行传输级加密:

<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>

要加密消息,请使用类似以下内容的绑定进行消息级加密:

<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>

您会注意到
下面的节点可以是
,它们应该与您选择的
模式相匹配。
clientCredentialType
设置为
Certificate
使用您的服务证书进行加密

“[加密频道]使用netTcpBinding,当使用Windows身份验证时,绑定使用服务的Windows令牌提供消息保护。当使用非Windows身份验证(如证书身份验证)时,您必须将服务证书配置为服务凭据。绑定使用服务证书进行消息保护。“

“[加密邮件]使用Windows身份验证时,消息安全性使用服务的Windows令牌来提供消息安全性。使用非Windows身份验证(如用户名、证书或颁发令牌身份验证)时,必须将服务证书配置为服务凭据。消息安全性将服务证书用于消息安全性"


希望这涵盖了所有的基础,让您能够用x.509证书加密您的消息或频道。

PS您可能想向自己证明一下。试试MessageAnalyzer:那么,您是说不可能关闭身份验证,但仍然可以加密通信通道?我不需要也不想配置身份验证,但我希望使用指定的证书对通道进行加密。这可能吗?恰恰相反,您可以启用和禁用WCF中的几乎所有内容。WCF是“默认安全的”,这在大多数情况下意味着您不必做任何事情就可以获得安全的消息传递。刚刚注意到我误解了你想要加密OP中的信息,而不是频道,所以我正在更新我的答案,以显示两者。谢谢。我要试试这些+详细说明请参见1。