使用 WinHTTP API 进行证书固定

2024-04-20

是否可以使用 Win32 WinHTTP API 实现证书固定,如果可以,如何实现? IE。如何根据“已知良好”的证书检查返回的服务器证书,最好不必将证书永久写入本地证书存储。


(受到jww的回答的启发)

首先我发现这一页 https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning这是关于固定以及证书和公钥固定之间的选择的优秀背景读物。

我使用 WinHTTP API 实现了证书固定,如下所示:

  1. 在 WinHttpOpen 之后但在 WinHttpConnect 之前,设置发送请求时的回调:

    WinHttpSetStatusCallback(hSession, &callbackFunc, WINHTTP_CALLBACK_SENDING_REQUEST, NULL);

  2. 在回调函数中,检索原始证书 blob:

    PCCERT_CONTEXT pCert=NULL; DWORD dwSize=sizeof(pCert); WinHttpQueryOption(hInternet, WINHTTP_OPTION_SERVER_CERT_CONTEXT, &pCert, &dwSize);

  3. 然后,如果进行完整的证书固定,请比较sha1(pCert->pbCertEncoded)针对已知良好的证书 SHA1 指纹。

  4. -或者- 如果改为进行公钥固定,请进行比较sha1(pCert->pCertInfo->SubjectPublicKeyInfo.PublicKey.cbData)针对已知良好的服务器公钥 SHA1。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 WinHTTP API 进行证书固定 的相关文章

  • c++11 正则表达式比 python 慢

    嗨我想了解为什么以下代码使用正则表达式进行分割字符串分割 include
  • 用 C# 启动 Windows 服务

    我想启动一个刚刚安装的Windows服务 ServiceBase ServicesToRun if bool Parse System Configuration ConfigurationManager AppSettings RunSe
  • fsockopen() 和 SSL 出错,“无法启用加密”

    我正在尝试连接到 Nominet EPP 测试台 但收到 无法启用加密 的消息 这似乎是一个罕见的错误 没有记录的解决方案或原因 用行 socket fsockopen ssl testbed epp nominet org uk 700
  • 同步执行异步函数

    我对此主题进行了大量搜索 并且阅读了本网站上有关此主题的大部分帖子 但是我仍然感到困惑 我需要一个直接的答案 这是我的情况 我有一个已建立的 Winform 应用程序 但无法使其全部 异步 我现在被迫使用一个全部编写为异步函数的外部库 在我
  • gtest 和 gmock 有什么区别?

    我试图理解的目的google mock Google 的 C 模拟框架 https github com google googletest blob master googlemock README md 我已经与gtest较早 但我还是
  • 如何从 List 中的字符串中删除数字/数字?

    我有一个字符串列表 List
  • 具有多重继承的类的 sizeof

    首先 我知道 sizeof 取决于机器和编译器的实现 我使用的是 Windows 8 1 x64 gcc 5 3 0 没有标志传递给编译器 我从大学讲座中得到了以下代码 include
  • 'goto *foo' 其中 foo 不是指针。这是什么?

    我正在玩标签作为值 https gcc gnu org onlinedocs gcc Labels as Values html并最终得到这段代码 int foo 0 goto foo 我的 C C 经验告诉我 foo means dere
  • C 中“for”循环中的两个变量

    我正在编写一些代码 需要在其中使用两个变量for环形 下面的代码看起来没问题吗 它确实给了我预期的结果 for loop 1 offset loop 2 offset 2 loop 1 gt offset 190 loop 2 lt 190
  • 以标准用户身份打开默认浏览器 (C++)

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 当 ShellExecute 打开浏览器时 它似乎读取 本地管理员 配置文件而不是用户
  • 枚举器上的 [[maybe_unused]]

    查看规格 maybe unused http en cppreference com w cpp language attributes 它指出 出现在类 typedef 变量 非静态数据成员 函数 枚举或枚举器的声明中 如果编译器对未使用
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • 在 ncurses 中使用退格键

    我设置了一个简单的 ncurses 程序 它使用 getch 一次读取一个字符并将它们复制到缓冲区中 我遇到的问题是检测到按下退格键 这是相关代码 while buffer i c getch EOF i if c n break else
  • 为什么C++变量是指针时不需要正确定义?

    我对 C 语言完全陌生 特别是指针 经验主要是 PHP 并且希望对以下内容进行一些解释 我已经尝试寻找答案 这两行代码如何能够在我的程序中完成完全相同的工作 第二行似乎违背了我迄今为止所学到和理解的关于指针的一切 char disk 3 D
  • C# 的空条件委托调用线程安全吗? [复制]

    这个问题在这里已经有答案了 这就是我一直以来编写事件引发者的方式 例如属性更改 public event PropertyChangedEventHandler PropertyChanged private void RaisePrope
  • Qt mouseReleaseEvent() 未触发?

    我有一个显示图片的库 我们称之为 PictureGLWidget 其中 class PictureGLWidget public QGLWidget 所以 PictureGLWidget 扩展了 QGLWidget 在PictureGlWi
  • 为什么 std::ranges::filter_view 对象必须是非常量才能查询其元素?

    include
  • 需要使用 openssl 加密和解密文件的示例 C 代码

    我正在用 Linux C 编写代码 我需要使用以下命令来加密和解密文件 openssl 目前 我使用系统命令 des3 e nosalt k 0123456789012345 in inp file out out file 进行加密 使用
  • win32 API 和 .NET 框架之间的选择

    我必须开发一个适用于 Windows 的应用程序 该应用程序将能够通过网络摄像头识别手势来控制鼠标 我将使用 vc 2008 进行开发 但我很困惑是使用 NET 框架还是核心 win32 API 性能对于我的应用程序非常重要 根据 Ivor
  • FakeItEasy 代理方法调用实际实现

    我正在尝试将对假对象的调用代理到实际的实现 这样做的原因是我希望能够使用 Machine Specifications 的 WasToldTo 和 WhenToldTo 它们仅适用于接口类型的伪造 因此 我正在执行以下操作来代理对我的真实对

随机推荐

  • PyTorch:如何检查训练期间某些权重是否没有改变?

    如何检查 PyTorch 训练期间某些权重是否未更改 据我了解 一种选择可以是在某些时期转储模型权重 并检查它们是否通过迭代权重进行更改 但也许有一些更简单的方法 有两种方法可以解决这个问题 First for name param in
  • 如何在 Recompose 中使用 withHandlers 将引用添加到功能组件并在 ScrollView 上调用 ScrollTo?

    我的具体目标是使用滚动到方法 http facebook github io react native docs scrollview html methodsScrollView 的但保持功能组件结构 更一般地说 这需要获取对当前组件的引
  • psql:符号查找错误:psql:未定义符号:PQsetErrorContextVisibility

    我将 postgres 版本从 9 2 24 切换到 9 6 因为我需要 jsonb 兼容性以及其他最新功能 我在 centos 7 上运行虚拟机 我决定擦除所有现有的 postgres 实例 因为它是临时的 所以几乎是空的 然后安装了 9
  • 签名者无效错误

    我为应用程序商店发行版构建 但是当尝试在设备上 而不是开发中 测试它时 它给出以下警告 应用程序 myapp 未安装在 iPhone 用户的 iPhone 上 因为签名者无效 任何解决这个问题的建议 此致 当您想要测试应用程序的生产版本 而
  • Unity 协程在后台停止

    我的问题如下 目前我在 Android iOS 游戏中运行了几个协程 但是当我将游戏发送到后台以便用手机尝试其他操作时 这些协程会停止 只有在我返回游戏后才恢复 有什么办法可以让协程在游戏在后台时继续运行吗 Android 将按设计暂停您的
  • 官方 Tensorflow 文档有 pdf 格式吗? (运行Windows)

    我无法找到 Tensorflow 的 pdf 格式文档 API 或教程 我指的是官方文档 而不是要求书籍推荐 具体为pdf格式 供离线本地参考和学习 一个问题是我运行的是 Windows 因此用于创建的可用工具集 它们动态地受到限制 或与通
  • 使用 gradlew 和 gradle 的区别

    使用有什么区别gradlew and gradle或者它们是相同的吗 不同之处在于 gradlew表明您正在使用 gradle 包装器 包装器通常是项目的一部分 它有助于 gradle 的安装 如果您在没有包装器的情况下使用 gradle
  • Request.UserHostAddress返回负载均衡器的IP地址

    我的网站中有一行关键代码可以在我们的开发环境中运行 但不能在生产环境中运行 好吧 我说它在开发中起作用 但事实是它给了 1 这是 IPv6 环回地址 无论如何 我想要做的是捕获访问该站点的用户的 IP 地址 因此 我使用Request Us
  • 以编程方式登录网站的技术

    我正在尝试自动登录 Photobucket 以供 API 使用 用于需要使用存储的凭据自动下载照片的项目 API 生成一个用于登录的 URL 并且使用 Firebug 我可以查看正在发送 接收的请求和响应 我的问题是 如何使用 HttpWe
  • 蓝牙连接:MODE_IN_CALL 与 MODE_IN_COMMUNICATION

    我有一个应用程序需要连接到无线蓝牙耳机来收集原始音频 MODE IN CALL 适用于某些设备 MODE IN COMMUNICATION 适用于其他设备 麦克风可以工作 但我失去了音频 反之亦然 我使用的是 Nexus 5x 和 Sams
  • Ajax.BeginForm 的 ASP .NET MVC 问题用 JSON 数据替换所有视图内容

    我在 VS 2015 中创建了一个示例 ASP NET MVC 网站 在视图中我使用扩展 Ajax BeginForm 将登录凭据发布到控制器 并且在 OnSuccess 回调上我想检查服务器错误 如果有则显示错误用户其他 重定向到主页 这
  • 当我向 /common/oauth2/v2.0/token 发出 Ajax 请求时出现 CORS 错误

    当我向以下对象发出 Ajax 请求时出现 CORS 错误https login microsoftonline com common oauth2 v2 0 token从我的申请中 下面是我正在使用的代码示例 var inputData g
  • 本地化 Android DatePickerDialog

    是否可以配置 android app DatePickerDialog 以便轻松本地化为欧洲格式 交换日期和月份并将英文按钮名称与本地化按钮名称交换 DatePickerDialog 默认情况下已本地化 我在真实设备上尝试过 对话框的本地化
  • 无法连接到 Subversion 本地存储库

    我已在 Windows 7 64 位上安装了 Subversion 1 8 8 和 TortoiseSVN 1 8 5 64 位 我使用 TortoiseSVN 在 C Projects SVNRepository 创建了一个本地存储库 在
  • 我可以从哪里开始使用可编程硬件?

    一段时间以来 我一直渴望至少学习一点有关硬件编程的知识 并想在这里提出要求以获得一些起点 我是一位相当有成就的程序员 具有 Delphi 和 Objective c 经验 但从未听过设备端口 中断 我什至不知道术语 更不用说对硬件进行编程了
  • 动态添加注释到现有类

    我有以下课程 public class Person 我想创建另一个类似这样的类 SomeAnnotation public class Person 通过像这样的简单方法 public static Class addAnnotation
  • IsPrimitive 不包含可为 null 的原始值

    我想检查类型是否是原始类型并使用以下代码 return type IsValueType type IsPrimitive 只要原始 int 可为空 这就可以正常工作 例如 int 如何检查该类型是否为可为空的原始类型 供参考 type I
  • 删除代码隐藏中的 asp.net 事件

    我想删除代码后面的事件 比如我的控件是这样的
  • 如何从三个 ReceiveStream 中一次读取一行?

    异步有StreamReader readline https docs python org 3 library asyncio stream html asyncio StreamReader readline 允许类似 while Tr
  • 使用 WinHTTP API 进行证书固定

    是否可以使用 Win32 WinHTTP API 实现证书固定 如果可以 如何实现 IE 如何根据 已知良好 的证书检查返回的服务器证书 最好不必将证书永久写入本地证书存储 受到jww的回答的启发 首先我发现这一页 https www ow