无需身份验证的安全 TCP .NET 远程处理通道

Dan*_*olt 2 .net encryption remoting

我有一个 .NET 2.0 远程处理应用程序,它需要在可能位于不同域或根本没有域的机器之间进行通信。它正在使用 TCP 通道。

一切正常,直到我启用加密,然后在连接时出现错误“服务器拒绝了客户端凭据。” 我已经做了很多搜索,但找不到适合我的解决方案。

我尝试过各种频道设置,但没有任何成功。

我的远程对象有它自己的内置身份验证,所以我不需要 Windows 进行任何类型的身份验证。

底线问题是:

“我可以在 .NET 远程 TCP 通道上启用加密,而无需 Windows 尝试验证客户端的凭据吗?”

Meh*_*raz 5

首先,使用“安全”属性/参数保护服务器和客户端通道。然后,在客户端将用户名和密码设置为空字符串。

IDictionary properties = new Hashtable();
properties["username"] = "";
properties["password"] = ""; 
// Set other properties here
IClientChannelSinkProvider provider = new BinaryClientFormatterSinkProvider();
channel = new TcpClientChannel(properties, provider);
ChannelServices.RegisterChannel(channel, true);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,客户端以匿名用户(NT AUTHORITY\ANONYMOUS LOGON)的身份连接到服务器,就我监视客户端和服务器之间的通信而言,它是加密的。

自从问这个问题已经很久了,.NET Remoting 有点被弃用了,但我发现它很有用,也可以帮助其他人。