C# 同一域上的两台机器*非*之间的自托管NetTcpBinding

C# 同一域上的两台机器*非*之间的自托管NetTcpBinding,c#,wcf,security,client-server,C#,Wcf,Security,Client Server,目前我有一个自托管的控制台应用程序,WCF应用程序需要托管在与客户端分离的机器上,因此服务器和客户端之间没有通过Windows域的安全链接 在此设置中使用消息级安全性有哪些选项?一位同事告诉我,如果我在TCP绑定上设置Security.Mode=SecurityMode.None,那么通信将正常工作,但这并不理想。如果在绑定上设置了SecurityMode.None,则不会对数据进行加密,这种想法对吗 非常感谢您在这方面提供的任何帮助。您可以使用具有/EncryptAndSign protect

目前我有一个自托管的控制台应用程序,WCF应用程序需要托管在与客户端分离的机器上,因此服务器和客户端之间没有通过Windows域的安全链接

在此设置中使用消息级安全性有哪些选项?一位同事告诉我,如果我在TCP绑定上设置Security.Mode=SecurityMode.None,那么通信将正常工作,但这并不理想。如果在绑定上设置了SecurityMode.None,则不会对数据进行加密,这种想法对吗


非常感谢您在这方面提供的任何帮助。

您可以使用具有/EncryptAndSign protectionLevel的传输安全性获得与netTcpBinding的加密连接,除非您关闭客户端上的证书验证,否则客户端必须信任服务证书,并且clientCredentialType None。您可以使用消息安全性,但传输的性能要高得多,如果需要,可以进行流式传输,并且通常更容易可靠地工作。假设域之间没有信任,您可以使用客户端证书或自定义用户名/密码进行身份验证。我认为,如果客户端和服务器不在同一个域上,或者不信任连接的域,或者在两端使用具有匹配用户名/密码的本地帐户,则无法进行Windows用户名/密码身份验证。

那么,如果有,您打算如何验证用户?或者你只是在寻找数据包隐私?我的计划是亲自验证用户身份。客户端应用程序将向服务器发送用户名/密码对。我一直在做更多的研究。理想情况下,我希望使用消息安全性,因为数据将通过Internet发送。我关心的不是客户机身份验证,而是客户机和服务器之间的数据加密。要做到这一点,唯一的方法是使用证书吗?无论是否使用Internet,都不应该影响您在传输上选择消息的安全性,尤其是不使用netTcpBinding。只有当您使用终止SSL隧道的中间SSL代理时,消息安全才真正有意义。netTcp不应该有问题,甚至只有当您想对这些代理隐藏内容时,消息安全才有意义。证书不是获得隐私的唯一途径,但肯定是最简单的,特别是如果你控制双方并且机器不在同一个域上。身份验证是其中的一个可选部分,听起来您正计划以另一种方式处理它,太棒了。然后,您所需要的只是一个服务器证书,这样您就可以进行SSL会话密钥交换,以获得一个加密的通道来进行通信。生成自签名证书并强制客户机在配置中信任它非常容易。然后,您可以在隧道内使用WCFs帮助或不使用WCFs帮助执行任何用户名/密码操作。