2

我正在使用 silverlight 5 和 WCF .. 并且该站点使用 HTTPS 保护。但是,如果我使用 fiddler,我可以在标题中看到: GET /ClientBin/XXXX-Web-MyService.svc/binary/GetUsers

如果我把它直接放在我的域之后:https ://www.mydom.com/ClientBin/XXXX-Web-MyService.svc/binary/GetUsers

它将从表格​​用户那里下载所有数据。我怎样才能隐藏和保护这些信息不被看到!!没有使用 SSL 吗?如果我使用 https,为什么这仍然可见!?

谢谢你。

编辑:我最初的问题是一种“未受过教育”的问题,对此我深表歉意,

我找到了有关该主题的更多信息并进行了更多研究。在这个关于 SO 的 Q 中,解释了为什么提琴手能够解密和查看通过 https 发送的请求和响应。
如果提琴手 2 可以解密所有通过 HTTPS 的调用,那么 SSL 有什么意义?

为了让事情变得更加困难,这个问题的常见解决方案是使用 “证书固定” ,这需要使用 System.Net.ServicePointManager,它不包含在 System.Net 命名空间的 silverlight 实现中。

所以在这里我坚持使用 SSL 证书。任何具有 Web 调试基本知识的人都可以“破解”我为此付出的代价。

4

1 回答 1

4

从纯粹的理论计算机科学的角度来看,您所要求的几乎是不可能的,实际上是不可能的。您需要实施一个受信任的平台来防止攻击。

现在对于科学位,集中注意力

好的,让我们从一些基本理论开始。SSL 以及由此扩展的 HTTPS 解决了一个非常非常具体的问题。您如何通过不安全的 NETWORK 机密信息与您以前从未联系过的一方交流信息。在这种情况下,重点是网络。它通过解决两个问题来做到这一点,

  1. 服务器的身份验证(服务器就是它所说的那个人)
  2. 密钥交换的非对称加密

有一些重叠,以确保这是一个步骤。我将专注于第一个,因为这是提琴手“攻击”您的系统的地方。

SSL 身份验证基于信任网络的概念。您的计算机有一个受信任的验证者列表。这些是 Verisign、Thawte、Geotrust 等公司。这些公司通过签署证书来验证证书(复杂的非对称加密术语,但它非常像手写签名,难以伪造,易于验证)。

Fiddler 通过将新的受信任 CA(验证程序)插入您的计算机来工作。从那时起,当您访问一个 HTTPS 站点时,它会代表您发送请求,读取它,然后将其转发给您,并带有自己的签名。由于您的计算机完全信任此签名,因此它认为没有任何问题。

现在,您要实现证书固定。这个恕我直言“非常糟糕”。它通过告诉您的软件需要特定的 SSL 证书来工作。这是不好的两个原因。

  1. 如果我可以使用 Fiddler,我可以使用 dotPeek 并在没有证书固定的情况下重新编译。
  2. 当您的证书被吊销时,您的客户端将无法连接。

为什么你的证书会被吊销?如果您的 CA 丢失了他们的私钥,那么他们将有义务确保其被撤销并向您发送替换密钥。此外,每张证书也都有销售日期,并且必须在它们开始闻起来之前更换。

所以最后你能做什么?

SSL 不是为防止您在计算机上执行的操作而设计的。执行您所要求的最简单的方法是将 WCF 调用简单地包装在额外的对称(甚至非对称)加密层中。但又一次。密钥必须存在于某个地方,因此您的客户端将能够从您的二进制文件的简单反汇编中获取密钥,并能够构建自己的代理。

综上所述

这与 DRM 问题几乎完全相同。你想让你的客户访问他们机器上的东西,但不向他们展示它是如何工作的。如果您确实设法解决了这个问题,请发布后续信息,因为索尼、任天堂和微软(仅举几例)会对您的发现非常感兴趣。

于 2013-03-10T14:09:18.733 回答