C# :在发送 HTTP GET / POST 之前对服务器证书进行身份验证

本文关键字:服务器 证书 身份验证 POST HTTP GET | 更新日期: 2023-09-27 18:35:17

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

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

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

C# :在发送 HTTP GET / POST 之前对服务器证书进行身份验证

你要问的是"如何在客户端应用程序中实现证书固定

执行此操作的方法是在负责发出 HTTPS 请求的服务点上附加验证回调。验证回调将覆盖默认行为("接受 Windows 信任的任何证书"),而是验证收到的证书是否正是您期望的证书。

现在,在你走这条路之前,请记住几件事:

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