WCF 加密和握手究竟是如何工作的?

How does the WCF encryption and handshake exactly work?

我有一个关于 Windows Communication Foundation 使用的传输加密的非常具体的问题。我写了一个客户端和一个服务 application.The 服务被托管为 Windows 服务并从一个特殊的用户开始,让我们说 Jeremy。

我的客户端在不同的计算机上,但在同一个域中。通过传输加密的 net.tcp 绑定进行通信。

问题 1: 如果我用 wireshark 嗅探,第一个包是明文

问题2:客户端App.config中的是一个自动生成的identity-tag,格式为"jeremy@mycompany.com"。如果我将它设置为空白,则所有内容都以明文形式发送。如果我删除它,程序将无法运行。

有人能描述一下握手过程中到底发生了什么吗?我认为 Kerberos 正在获取服务的票证以验证客户端。但为什么它是明文呢?

我希望有人能够提供帮助。

编辑:clientCredentialType当然是Windows,保护级别:encryptAndSign

好的,经过大量研究,我发现这是由于 KerberosNTLM.[=14= 的差异造成的]

我说的明文是server和client之间的握手。因此,如果我使用 Kerberos,明文只是一些调用服务的字符。如果 Kerberos 不可用,或者如果您更改身份标记,Kerberos 将回退到 NTLM,它负责更长的握手时间,等等一些更清晰的文本段落。我现在强制客户端使用带有以下行的 Kerberos:

<endpointBehaviors>
    <behavior>
      <clientCredentials>
        <windows allowNtlm="false"/>
      </clientCredentials>
    </behavior>
  </endpointBehaviors>

windows 安全日志 中,您现在可以看到身份验证是通过 Kerberos 进行的。

这里是对我理解 Kerberos 和解决问题帮助最大的链接:

https://blogs.msdn.microsoft.com/asiatech/2009/08/27/how-to-impersonate-or-delegate-a-client-in-wcf/

https://www.tecchannel.de/a/die-funktionsweise-von-kerberos,461645

https://msdn.microsoft.com/en-us/library/59hafwyt(v=vs.100).aspx