NetTcpBinding(读取WindowsStreamSecurityBindingElement)如何encryption/签名消息?

我想了解当Windows传输安全性使用“Windows”凭据时,NetTcpBinding使用的消息encryption和签名机制。 如果我的AD使用NTLM而不是Kerberos呢? 信息是否仍然被签名和encryption?如果是,如何?

提前致谢,

Akshat

Solutions Collecting From Web of "NetTcpBinding(读取WindowsStreamSecurityBindingElement)如何encryption/签名消息?"

简短的回答是,如果您已将Transport Security ProtectionLevel设置为EncryptAndSign(默认值),那么使用NTLM身份验证,邮件仍将被签名并加密。

以下是它的工作原理概述:

  • 选择传输安全性将在通道堆栈中配置WindowsStreamSecurityBindingElement。 这插入一个流升级提供程序(见下文)
  • 在NetTcpBinding中,客户端和服务之间的消息交换发生在.NET消息成帧协议中 ,它提供了消息成帧和客户端和服务协商流升级的机制,其主要用途是建立传输安全。 如果在通道堆栈中配置了流升级提供程序,则在客户端打开通道时,将在Framing Protocol的Preamble阶段调用此流提升提供程序。
  • WindowsStreamSecurityBindingElement的升级提供程序使用SPNEGO安全软件包调用客户端和服务器之间的SSPI握手:在NetTcpBinding中,通常会导致Kerberos被选为基础安全提供程序(如果可用),但是如果不可用,将选择NTLM。
  • 如果NTLM是由此产生的身份验证提供程序,则SSPI握手将涉及NTLM规范中描述的标记的三阶段NTLM质询 – 响应交换。 该协议包括一个用于交换消息签名和加密密钥的机制。 一旦SSPI握手已经产生了适当的安全上下文,此后所有交换的消息在发送信道栈的流升级提供者中被签名和加密,并且在接收信道栈的流升级提供者中解密和验证,在每种情况下通过使用对NTLM安全提供者通过抽象的SSPI消息支持功能 。

这是一个微软的合规实施,没有妥善记录,也许是为了防止入侵者利用它。

据我所知,这通常发生在TCP级别,具有特殊的令牌是由用户的凭据生成,并与请求一起传递。 这是由Windows安全通道截获,并对AD认证。

该令牌被用作加密通信的密钥(或作为生成密钥的基础)。

我想如果你看看TCP数据包,你必须能够看到令牌 – 尽管我从来没有见过。

如果你在代码中做这一切,那么你可以在这里找到选项(搜索'NetTcpBinding')。 运输安全是通过Windows内置的TLS 。

这里的图表应该对你的情况有所帮助。