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

时间:2010-11-15 18:31:45

标签: windows wcf authentication encryption

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

先谢谢,

Akshat

3 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:1)

这是Microsoft的专有实现,没有正确记录,也许是为了防止入侵者利用它。

据我所知,这通常发生在TCP级别,特殊令牌由用户的凭据生成并与请求一起传递。这被Windows安全通道拦截并针对AD进行身份验证。

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

我认为如果你看一下TCP数据包,你必须能够看到令牌 - 尽管我从未见过它。

答案 2 :(得分:0)

如果您在代码中执行此操作,则可以找到选项here(搜索“NetTcpBinding”)。运输安全是通过Windows builtin TLS

图表here应该对您的方案有所帮助。