2011-03-03 100 views
4

WCF的netTCPBinding默认为“安全”。据我的理解,这意味着..WCF netTCPBinding

  • 调用者使用他们的Windows凭据进行身份验证。
  • 消息已签名
  • 消息已加密。

但是,我可以在本地主机上设置一个非常基本的WCF客户端服务。身份验证将在同一台机器上运行,但签名和加密如何工作?

WCF需要一个证书来签署和加密消息。如果我没有证书,那么我的服务如何运作?这条消息如何 - 即使是在同一台机器上进行签名和加密。

谢谢。

回答

5

默认情况下,NetTcpBinding使用传输安全性以及您列出的默认特征。

在此上下文中对消息进行签名和加密并不意味着与消息安全性中的相同。相反,这意味着通过网络传输发送的所有数据包都经过签名和加密。这不依赖证书。它由安装在发送和接收机器上的操作系统中的安全提供程序完成,通过SSPI(Security Support Provider Interface)调用 - 涉及到相同的机制,例如,当使用域凭证访问某个资源(如不同的文件)时机器在网络上。

任何应用程序数据在连接上发送之前,结合编排发送者和接收者之间的SSPI握手,指定Negotiate安全包(在此选择NTLM或Kerberos作为实际的安全协议,这取决于的能力各自的主机)。作为握手的一部分,安全令牌通过连接进行交换,双方的安全提供者在这些安全令牌的最后会同意会话密钥用于签名和加密随后的应用消息。

+0

为了清楚起见,如果我有一个Windows客户端和使用NetTcpBinding进行通信的服务器,我可以使用没有证书的传输安全性 - 如果是这样的话,客户端和服务器会自行整理可以使用的加密和数据加密。但是,如果两台机器无法握手,那么数据将以未加密方式发送? – Remotec 2011-03-08 13:49:59

+2

几乎 - 实际行为将根据绑定的配置而有所不同 - 默认情况下,您将通过Windows凭据和数据包进行签名和加密来获得传输安全性:只要客户端的Windows凭据来自受信任的Windows域,就可以工作由服务器。客户端和服务器使用客户端的Windows凭据协商SSPI会话 - 不需要证书。如果握手失败(例如,服务器不知道/信任客户端的域名),则根本无法获得任何数据传输,则该通道将发生故障。 – 2011-03-08 14:57:03