2017-06-20 46 views
0

我对Windows Communication Foundation使用的传输加密有个非常具体的问题。我写了一个客户端和一个服务应用程序。该服务作为Windows服务托管,并以特殊用户开始,让我们说杰里米。WCF加密和握手如何正确工作?

我的客户端位于单独的计算机上,但位于相同的域中。通信通过与传输加密的net.tcp绑定进行。

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

问题2:在客户端的App.config中是一个自动生成的身份标签的形式“[email protected]”。如果我将其设置为空,则所有内容均以明文形式发送。如果我删除它,该程序将无法工作。

是否有人能够描述握手过程中究竟发生了什么?我认为Kerberos正在服务中获取一张票来验证客户端。但为什么它在明文中呢?

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

编辑:本clientCredentialType当然是窗户用的ProtectionLevel的:encryptAndSign

回答

0

好了大量的调查研究后,我发现这个happend由于的KerberosNTLM的差异。

我提到的明文是服务器和客户端之间的握手。所以如果我使用Kerberos,明文只是一些调用服务的字符。如果Kerberos不可用,或者如果您更改身份标记,Kerberos会回退到NTLM,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