NetTcpBinding(读取WindowsStreamSecurityBindingElement)如何加密/签署消息?

Aks*_*hat 7 windows authentication encryption wcf

我想了解当"Windows"凭据与传输安全性一起使用时NetTcpBinding使用的消息加密和签名机制.如果我的AD使用NTLM而不是Kerberos怎么办?邮件是否仍会被签名和加密?如果是,如何?

提前致谢,

Akshat

Chr*_*son 8

简而言之,是的,使用NTLM身份验证,如果您已将Transport security ProtectionLevel设置为EncryptAndSign(默认值),则邮件仍会被签名和加密.

以下是它的工作原理:

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


Ste*_*end 0

如果您在代码中完成这一切,那么您可以在此处找到选项(搜索“NetTcpBinding”)。传输安全通过Windows 内置 TLS实现。

这里的图表应该对您的场景有帮助。