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

Posted

技术标签:

【中文标题】WCF 加密和握手究竟是如何工作的?【英文标题】:How does the WCF encryption and handshake exactly work? 【发布时间】:2017-11-22 12:53:33 【问题描述】:

我有一个关于 Windows Communication Foundation 使用的传输加密的非常具体的问题。我编写了一个客户端和一个服务应用程序。该服务作为 Windows 服务托管,并由一个特殊用户启动,让我们说 Jeremy。

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

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

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

有人能够描述握手过程中究竟发生了什么吗?我认为 Kerberos 正在服务处获取票证以对客户端进行身份验证。但是为什么它是明文呢?

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

编辑:clientCredentialType当然是windows with protectionLevel: encryptAndSign

【问题讨论】:

【参考方案1】:

好的,经过大量研究后,我发现这是由于 KerberosNTLM 的差异造成的。

我提到的明文是服务器和客户端之间的握手。因此,如果我使用 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

【讨论】:

以上是关于WCF 加密和握手究竟是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

!function()() 究竟是如何工作的? [复制]

Spring BeanPostProcessor 究竟是如何工作的?

iOS MagicalRecord 对 tableview 的分组和排序。它们究竟是如何工作的?

WiX“服务安装”究竟是如何在内部工作的?

Spring Security 拦截 URL 究竟是如何工作的?

尾递归究竟是如何工作的?