im使用silverlight 5和WCF。。并且该站点使用HTTPS进行安全保护。然而,如果我使用fiddler,我可以在标题中看到这一点:GET/ClientBin/XXX-Web-MyService.svc/binary/GetUsers
如果我把它直接放在我的域名后面:https://www.mydom.com/ClientBin/XXXX-Web-MyService.svc/binary/GetUsers
它将从tabel用户下载所有数据。我如何隐藏和保护这些信息不被看到!!使用SSL还不够吗?如果我使用https,为什么这是可见的!?
谢谢。
编辑:我最初的问题有点"没受过教育",对此我深表歉意,
我发现了更多关于这个主题的信息,并做了更多的研究。在这个关于SO的Q中,解释了为什么fiddler能够解密和查看通过https发送的请求和响应
如果fiddler 2可以通过HTTPS解密所有呼叫,那么SSL的意义何在?
为了让事情变得更加困难,这个问题的常见解决方案是使用"证书固定"这需要使用System.Net.ServicePointManager,该管理器未包含在System.Net命名空间的silverlight实现中。
所以在这里,我被一个SSL证书卡住了。我花钱买的SSL证书可以被任何具备网络调试基本知识的人"破解"。
从纯粹的理论计算机科学的角度来看,你所要求的几乎是不可能的,甚至是不可能。您需要实现一个受信任的平台来抵御攻击。
现在是科学部分,集中
好的,让我们从一些基本理论开始。SSL和HTTPS解决了一个非常具体的问题。你如何通过一个不安全的网络机密信息与一个你从未交流过的一方交流信息。在这种情况下,重点是NETWORK。它通过解决两个问题来做到这一点,
- 服务器的身份验证(服务器就是它所说的服务器(
- 密钥交换的非对称加密
有一些重叠,以确保这是一个步骤。我将把重点放在1号,因为这是小提琴手"攻击"你的系统的地方。
SSL身份验证基于信任网络的概念。您的计算机有一个TRUSTED验证器列表。这些公司包括Verisign、Thawte、Geotrust等。这些公司通过签名来验证证书(复杂的非对称加密术语,但它非常像手写签名,难以伪造,易于验证(。
Fiddler通过在您的计算机中插入一个新的可信CA(验证器(来工作。从那时起,当你访问HTTPS网站时,它会代表你发送请求,读取它,然后用自己的签名转发给你。由于您的计算机完全信任此签名,因此它认为没有任何错误。
现在,您想要实现证书固定。这个IMHO"太可怕了"。它的工作原理是告诉你的软件需要一个特定的SSL证书。这有两个原因。
- 如果我能使用Fiddler,我就可以使用dotPeek并在没有证书固定的情况下重新编译
- 当您的证书被吊销时,您的客户端将无法连接
为什么你的证书会被吊销?如果您的CA丢失了他们的私钥,那么他们将有义务确保其被吊销,并向您发送替换密钥。此外,每一张证书都有一个截止日期,必须在它们开始散发气味之前更换。
那么最后你能做什么呢
SSL不是为防止您在机器上所做的事情而设计的。做您所要求的事情的最简单的方法是简单地将WCF调用封装在一个额外的对称(甚至非对称(加密层中。但是再一次。密钥必须存在于某个地方,因此您的客户端将能够从二进制文件的简单反汇编中获取密钥,并能够构建自己的代理。
结论
这与DRM问题几乎完全相同。你想让你的客户访问他们机器上的东西,但不想向他们展示它是如何工作的。如果你真的设法解决了这个问题,一定要跟进,因为索尼、任天堂和微软(仅举几个例子(会对你的发现非常感兴趣。