1

我需要修改 WCF 端点绑定地址。以下是有关该问题的一些背景信息:

我有一个 NT 类服务(如果重要,不是 web 服务)。它System.ServiceModel.ServiceHost使用 Endpoint 创建一个端点地址以这种方式创建的端点:

var epa = new EndpointAddress(string.Format("https://localhost:{0}/ServiceAPI/", 8181));

用于的绑定ServiceEndpoint是一个WebHttpBindingwith Mode=WebHttpSecurityMode.Transport(即https)。

当 ServiceHost 打开时,我可以转到命令提示符,然后执行“Netstat -a”并查看绑定到 Listen 的地址为 0.0.0.0:8181。

到目前为止,没有问题。然而,一个大客户提出了一个“安全问题”,因为 WCF“侦听”在地址 0.0.0.0 而不是 127.0.0.1 上,潜在的攻击者可以从外部计算机连接到该地址。他们构建的测试是从外部机器使用telnet 8181,如果连接发生,则测试失败。更改请求是将服务修改为在 127.0.0.1:8181 上“侦听”,以便连接到该端口的唯一可能性是从本地计算机。

我做了相当多的修改,试图让 WCF 在“127.0.0.1”而不是“0.0.0.0”上“监听”。在我所有的尝试中,唯一的方法是设置HostNameComparisonMode为“精确”并以这种方式创建端点地址:

var epa = new EndpointAddress(string.Format("https://127.0.0.1:{0}/ServiceAPI/", 8181));

(实际上,顺便说一句,如果我使用不同的绑定,例如NetTcpBinding,上述EndPointAddress构造绑定到地址“127.0.0.1:8181”而不改变 HostNameComparisonMode。当我使用 WebHttpBinding 时,它只会在内部切换到“0.0.0.0:8181” ,并且无法设置 HostNameComparisonMode=Exact。)

但是,这(设置 HostNameComparisonMode=Exact)会导致复杂的问题,因为已经开发了尝试(在服务器上)连接到“ https://localhost:8181/ServiceAPI ”的现有第 3 方代码,并且当HostNameComparisonMode 设置为“Exact”,由于“localhost”和“127.0.0.1”之间的差异,WCF 只会向任何请求返回 http 错误 506。

我目前正在寻找的是一种将 WCF 设置为绑定到“127.0.0.1:8181”(由 netstat -a 确定)的方法,其中 HostNameComparisonMode 仍设置为默认的“StrongWildcard”设置。或者除非有办法做到这一点,否则另一个创造性的建议是导致来自外部机器的连接无法连接到该端口。(测试将使用另一台机器上的“telnet servername 8181”,但无法连接。)

有任何想法吗?谢谢!

4

1 回答 1

0

如果我理解正确,你想从远程机器连接到这个地址,那么你可以试试BasicHttpBinding吗?您也可以尝试将其托管在:“ https://localhost :{0}/ServiceAPI/”, 8181" 如果我​​理解错误,请纠正。

于 2017-02-09T09:45:32.437 回答