0

我正在构建一个 .net 应用程序,并且我想让网络调用足够安全,以至于通过提琴手之类的东西来监控流量并不容易。我希望能够知道来自服务器的证书与预期不符,然后永远不会发送带有请求数据的完整请求。

Twitter 的 iOS 应用程序就是这样做的。我认为有人必须以某种方式复制 twitter 的 https 证书并制作该提琴手的证书。我自己没有做过,但我认为这就是我的理解。您在 fiddler 中看到的是隧道已创建,但实际上并未发出任何请求。当您没有在设备上安装提琴手的 HTTPS 证书并且您打开浏览器到 google.com/创建隧道然后浏览器知道“uhoh untrusted server”并向用户显示一条消息时,它的情况相同。我想让它更安全,只允许 1 个证书/我的服务器的证书。

有道理?我想我想出了如何通过单独提出一个完整的虚拟请求来做到这一点/但这并不理想。

4

1 回答 1

3

您要问的是“如何在我的客户端应用程序中实现证书固定?”

这样做的方法是在负责发出 HTTPS 请求的服务点上附加一个验证回调。您的验证回调将覆盖默认行为(“接受 Windows 信任的任何证书”),而是验证收到的证书是否完全符合您的预期。

现在,在你走这条路之前,请记住以下几点:

  1. 具有管理员或调试权限的攻击者可以轻松更改内存中的代码以删除您的验证。这称为“受信任的客户端”问题。
  2. 如果代码曾经在安全设备进行 HTTPS 检查(例如 BlueCoat、ISA TMG 等)的企业环境中运行,您的验证将会中断
  3. 您的验证将阻止“证书敏捷性”——如果服务器证书需要更改,您将需要更新应用程序。如果您想使用具有多个证书的负载平衡配置或公共 HTTPS CDN,则需要更新您的验证逻辑。
于 2013-10-13T04:12:24.700 回答