C# 对于互联网上的WCF服务来说,传输安全是一种糟糕的做法吗?

C# 对于互联网上的WCF服务来说,传输安全是一种糟糕的做法吗?,c#,wcf,http,transport-security,C#,Wcf,Http,Transport Security,我有一个可以通过互联网访问的WCF服务。它具有wsHttpBinding绑定和消息安全模式,并具有用户名凭据以对客户端进行身份验证。 msdn说,我们应该在互联网场景中使用消息安全性,因为它提供端到端安全性,而不是像传输安全性那样提供点到点安全性 如果我在互联网上使用wcf服务的传输安全性怎么办?这是个坏习惯吗?恶意用户能看到我的数据吗?不,这是一个很好的做法-问题是:在处理internet连接时,您无法保证在任意数量的中间跳上有完整的安全连接链 传输安全性所能保证的只是从客户端到第一个跃点的链

我有一个可以通过互联网访问的WCF服务。它具有wsHttpBinding绑定和消息安全模式,并具有用户名凭据以对客户端进行身份验证。 msdn说,我们应该在互联网场景中使用消息安全性,因为它提供端到端安全性,而不是像传输安全性那样提供点到点安全性


如果我在互联网上使用wcf服务的传输安全性怎么办?这是个坏习惯吗?恶意用户能看到我的数据吗?

不,这是一个很好的做法-问题是:在处理internet连接时,您无法保证在任意数量的中间跳上有完整的安全连接链

传输安全性所能保证的只是从客户端到第一个跃点的链接,以及从最后一个跃点到服务器的链接——这两者之间的任何内容都是您无法控制的。因此,基本上,互联网上的传输安全是不起作用的——除非你有一个严格控制的环境,你知道客户端直接连接到你的服务器


由于这些技术限制,传输安全仅在公司/LAN环境中有效。一旦无法控制路由和中间跳数,就需要使用消息安全性来实现端到端安全。

是的,当客户端(大多数客户端都这样做)验证服务器证书时,它是100%安全的

这里提到的多跳场景完全是假的。只有当相同的消息通过不同的应用程序时,才是这样。例如,几个应用程序代理。如果这些代理无法安全地通信,则中间网络嗅探器可以读取消息

换句话说,internet上的客户机/服务器通信是100%安全的,即使其间有一百万个路由器,但只有当客户机验证服务器证书时,它才是安全的,因为客户机可以连接到中间人主机,该主机可以用假证书模拟服务器。如果客户端未验证证书,则消息可能会被泄露。

IMO它可能不是100%

如果BlueCoat能做到,那么还有谁能做到


我能再问你一件事吗?如果需要通过互联网向WCF传输大量数据,该怎么办?使用wsHttpBinding和消息安全性非常慢@谢尔盖:看看WCF流媒体——你也可以使用wsHttpBinding——应该可以加快速度@Sergey:您可以创建一个单独的服务合同,而不必为文件传输提供任何消息安全性—速度更快,但不再非常安全—这是一种权衡(在计算机科学中总是如此)。如果客户端只信任特定的ssl证书呢?它不会使人在中间攻击无效,并使传输级别安全可用于互联网吗?但是如果连接在HTTPS之上,那么中间人无法理解该消息,因为它是加密的,那么为什么传输安全性不够?(我不确定@axk是否已经这样问了)那么你的意思是通过互联网使用传输安全,数据不会被黑客入侵?这是正确的,只要传输是安全的。它基本上就是这么说的。您可以选择加密消息和/或传输。但前提是运输安全!通过不安全的传输发送消息会使通信易受攻击。BlueCoat依赖于向受信任的机构添加证书。这离不开客户的合作。