【问题标题】:WCF net.tcp binding with certificate based message security but security mode turned offWCF net.tcp 与基于证书的消息安全绑定但安全模式已关闭
【发布时间】:2016-01-22 11:10:03
【问题描述】:

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

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

提前致谢

【问题讨论】:

    标签: c# wcf encryption tcp certificate


    【解决方案1】:

    初步反应的详细说明

    如果您想加密 channel,请使用类似这样的绑定来进行 transport-level 加密:

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

    您会注意到&lt;security/&gt; 下方的节点可以是&lt;message/&gt;&lt;transport/&gt;,它们应该与您选择的mode 匹配。 clientCredentialType 设置为 Certificate 使用您的服务证书进行加密。

    "[加密通道] 使用netTcpBinding,当使用Windows认证时,绑定使用服务的Windows令牌来提供消息保护。当使用非Windows认证如证书认证时,你必须配置一个服务证书作为服务凭据。绑定使用服务证书进行消息保护。"

    "[对消息进行加密] 使用Windows身份验证时,消息安全使用服务的Windows令牌来提供消息安全。使用非Windows身份验证如用户名、证书或颁发令牌身份验证时,您必须配置一个服务证书作为服务凭证。消息安全使用服务证书来保护消息。"

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

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

    【讨论】:

    • PS 你可能想证明给自己看。试用消息分析器:microsoft.com/en-us/download/details.aspx?id=44226
    • 那么,您是说不能关闭身份验证但仍然加密通信通道?我不需要也不想配置身份验证,但我希望使用指定的证书对通道进行加密。这可能吗?
    • 恰恰相反,您可以启用和禁用 WCF 中的几乎所有内容。 WCF 是“默认安全的”,这在大多数情况下意味着您无需执行任何操作即可获得安全消息传递。刚刚注意到我误解了你想在 OP 而不是 Channel 中加密消息,所以我正在更新我的答案以显示两者。
    • 谢谢。我要试试这些。 +1 详细说明。
    猜你喜欢
    • 2011-01-27
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2011-12-09
    相关资源
    最近更新 更多