WCF netTCPBinding

4

WCF的netTCPBinding默认是"安全的"。据我了解,这意味着:

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

然而,我可以在我的本地主机上设置一个非常基本的WCF客户端服务。由于它在同一台机器上,因此身份验证将起作用,但签名和加密如何工作呢?

WCF需要证书来签名和加密消息。如果我没有证书,那么我的服务如何运作呢?即使只是发送到同一台计算机,消息也会被签名和加密吗?

谢谢。

1个回答

5
默认情况下,NetTcpBinding使用传输安全,具有您列出的默认特性。
在此上下文中,消息的签名和加密并不意味着与消息安全中相同的含义。相反,它意味着在网络传输期间发送的所有数据包都已被签名和加密。这不依赖于证书。它是通过操作系统上安装的安全提供程序在发送和接收机器上调用SSPI(Security Support Provider Interface)实现的——例如,在使用域凭据访问网络上的其他计算机上的文件时所涉及的相同机制。
在连接上发送任何应用程序数据之前,绑定会在发送方和接收方之间协调一个SSPI握手,指定“Negotiate”安全包(这将根据各个主机机器的能力选择NTLM或Kerberos作为实际安全协议)。安全令牌在此握手过程中通过连接交换,最终两侧的安全提供程序将同意会话密钥以用于签名和加密随后的应用程序消息。

仅为了澄清,如果我有一个使用NetTcpBinding通信的Windows客户端和服务器,我是否可以在没有证书的情况下使用传输安全 - 如果是这样,客户端和服务器将自行解决可用的加密方式并对数据进行加密。但是,如果两台机器无法握手,则数据将以未加密的形式发送? - Remotec
2
几乎 - 实际行为将根据绑定的配置而变化 - 默认情况下,您将获得使用Windows凭据的传输安全性,并且数据包都被签名和加密:只要客户端的Windows凭据来自服务器信任的Windows域,这将起作用。客户端和服务器使用客户端的Windows凭据协商SSPI会话 - 不需要证书。如果握手失败(例如,服务器不知道/信任客户端的域),则根本不会进行任何数据传输,通道将故障。 - Chris Dickson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接