C# : Authenticate server certificate before sending HTTP GET/POST

标签 c# authentication ssl ssl-certificate fiddler

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

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

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

最佳答案

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

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

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

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

关于C# : Authenticate server certificate before sending HTTP GET/POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19339818/

相关文章:

c# - 在 C# 中构建一个简单的高性能树数据结构

c# - 停止将我的应用程序检测为病毒

java - 没有浏览器的谷歌驱动器登录api

macos - 通过命令行登录 OSX

c# - ffmpeg无法读取用C#编辑和保存的图像

c# - 来自 Azure Blob 下载图像的链接,但我只需要观看(Asp.NET Core)

javascript - 身份验证 - 每个 ajax 中的 key

android - 错误 : Name not maching for self signed SSL certificates on Android

java - 使用负载均衡器进行 SSL 卸载

ios - 使用 Microsoft Azure SDK 在 iOS 中固定 SSL 证书