C#:在发送HTTP GET / POST之前验证服务器证书

时间:2013-10-12 22:22:56

标签: c# authentication ssl ssl-certificate fiddler

我正在构建一个.net应用程序,我想让网络电话足够安全,通过类似提琴手的东西来监控流量并不容易。我希望能够知道来自服务器的证书不符合预期,然后永远不会发出包含请求数据的完整请求。

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

有意义吗?我想我想出了如何做一个单独的完整虚拟请求/但这并不理想。

1 个答案:

答案 0 :(得分:3)

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

这样做的方法是在负责发出HTTPS请求的服务点上附加a validation callback。您的验证回调将覆盖默认行为(“接受Windows信任的任何证书”),而是验证收到的证书是否恰好是您期望的证书。

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

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