验证 Authenticode 签名是否来自我们公司以进行自动更新

2023-11-23

我正在实现自动更新功能,需要一些有关如何使用最佳实践安全地执行此操作的建议。我想使用下载的文件的 Authenticode 签名来验证它是否可以安全运行(即源自我们公司并且未被篡改)。我的问题与问题#2008519 非常相似。

最根本的问题是:检查自动更新功能的 Authenticode 签名的最佳、最安全的方法是什么?应检查证书中的哪些字段?要求是:(1)检查签名是否有效,(2)检查这是我的签名,(3)当我的证书过期并且我得到新的证书时,旧客户端仍然可以更新。

以下是我的研究中的一些背景信息/想法:我相信这可以分为两个步骤:

  1. 验证签名是否有效。我相信使用 WinVerifyTrust 应该很容易,如中所述http://msdn.microsoft.com/en-us/library/aa382384(VS.85).aspx- 我预计这里不会出现问题。

  2. 验证签名是否对应于我们公司,而不是其他公司。这似乎是一个更难回答的问题:

一种可能性是检查签名中的某些字符串。可以通过 MS 知识库文章 #323809 中的代码获取,但本文并未就此类应用程序(或任何其他应用程序)应检查哪些字段提出建议。问题#1072540还说明了如何获取一些证书信息,但同样不建议实际检查哪些字段。我担心的是,字符串可能不是最好的检查:例如,如果另一个人能够获得同名的证书怎么办?或者我们将来是否有正当理由更换琴弦?

该人位于问题#2008519有一个非常相似的要求。他对“TrustedByUs”功能的需求与我的相同。然而,他通过比较公钥来进行检查。虽然这在短期内可行,但似乎不适用于自动更新功能。这是因为代码签名证书的有效期最多为 2 - 3 年。因此,未来当我们在两年后购买新证书时,老客户端将因公钥发生变化而无法再更新。


问题#2008519 的人有一个 非常相似的要求。他的需要 “TrustedByUs”功能是相同的 到我的。然而,他继续做 通过比较公钥进行检查。 虽然这适用于 短期看来不会 致力于自动更新功能。 这是因为代码签名 证书仅对 2 - 3 人有效 最长年数因此,在未来, 当我们在 2 购买新证书时 几年了,老客户就不会了 能够继续更新,因为 公钥的改变。

由于担心的是应用程序信任您而不是某人信任您,因此您可以仅使用自签名并将应用程序本身所需的任何公钥嵌入其中。这使您可以更好地控制该过程。当要求不受您控制的用户或应用程序给予信任时,这是不合适的,但在这种情况下,应用程序在您的控制之下,因此它可以正常工作。这使您可以轻松避免将其他人的类似证书误认为是您自己的证书。

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

验证 Authenticode 签名是否来自我们公司以进行自动更新 的相关文章

  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • 已达到网络 BIOS 命令限制

    我的 ASP Net 应用程序从另一台 Windows 服务器上的共享文件夹获取文件 当请求增加时 我收到以下错误 The network BIOS command limit has been reached 我已按照以下步骤操作微软 K
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • 使用正则表达式验证 IPv4 地址

    我一直在尝试获得一个有效的正则表达式来进行 IPv4 验证 但运气不佳 似乎有一次我已经受够了 25 0 5 2 0 4 0 9 01 0 9 0 9 4 但它会产生一些奇怪的结果 grep version grep GNU grep 2
  • 如何为 FFI 创建一个包含可为空函数指针的结构?

    我有一个现有的 C 程序 可以加载共享库插件 主 C 程序通过包含整数 字符串 函数指针等的 C 结构与这些插件交互 如何从 Rust 创建这样的插件 请注意 真正的 C 程序不能更改 API 也不能更改 这些都是固定的 现有的东西 所以这
  • Matplotlib 用线连接散点图点 - Python

    我有两个列表 日期和值 我想使用 matplotlib 绘制它们 下面创建了我的数据的散点图 import matplotlib pyplot as plt plt scatter dates values plt show plt plo
  • 应用程序性能的基线和基准之间的差异

    什么是基线 什么是基准 这些的最佳定义是什么 如何确定一组数字的基准并对另一组数字进行基准测试 有趣的定义来自SPR 软件生产力研究 基线和基准是相似但不同的活动 形象地说 基线是 沙子里的线 对于一个组织来说 它可以衡量重要的绩效特征以供
  • 带注释的 Hibernate 字符串主键

    我正在尝试创建一个带有主键是字符串的注释的权限类 我将在插入时手动分配它们 因此不需要 hibernate 为其生成值 我正在尝试做类似的事情 Id GeneratedValue generator assigned Column name
  • 如何一起使用 NSUbiquitousKeyValueStore 和 NSUserDefaults

    文档不清楚如何使用NSUbiquitousKeyValueStore与边缘情况 如果我想设置一个值 我知道我应该为两者都设置一个值NSUserDefaults and NSUbiquitousKeyValueStore因为 iCloud 可
  • 获取任意长度的列表元素的所有可能 (2^N) 组合

    我有一个包含 15 个数字的列表 如何生成这些数字的所有 32 768 种组合 即 按原始顺序排列任意数量的元素 我想到循环遍历十进制整数 1 32768 并使用每个数字的二进制表示形式作为过滤器来挑选适当的列表元素 有更好的方法吗 For
  • Application Insight Analytics - 查询客户端浏览器和设备

    有人知道如何查询 Azure App Insight 以获取客户端设备上的分析吗 或操作系统 我似乎能够获得有关客户国家 地区的良好统计数据 但无法获得设备的统计数据 你应该用过client CountryOrRegion在您现有的查询中
  • Android:RadioGroup - 如何配置事件监听器

    根据我的理解 要确定一个复选框是否被 单击 并确定它是否被选中 可以使用如下代码 cb CheckBox findViewById R id chkBox1 cb setOnCheckedChangeListener this public
  • 删除 kotlin 中的“this”回调

    我是一个 kotlin 新手 我正在尝试删除回调本身内的回调实例 我想要实现的目标类似于以下代码 private val myCallback SomeInterfaceType if it something someObject rem
  • Socket.io 与 nginx

    我正在尝试通过 nginx 1 6 提供静态文件 并使用 socket io 代理来自 Node js Web 服务器的套接字流量 这是 nginx conf 的相关部分 location socket io proxy pass http
  • 使 flatpickr 输入成为必需

    我正在使用令人惊奇的平面选取器在一个项目上 并且需要日历日期是强制性的 我试图在本机 HTML 中进行所有验证 因此我天真地尝试仅添加required属性到输入标签 但这似乎不起作用 有没有一种方法可以使 flatpickr 本身强制指定日
  • erlang:UNIX 域套接字支持吗?

    有没有办法直接从 Erlang 访问 UNIX 域套接字 例如 var run dbus system bus socket without求助于第三方驱动程序 Erlang OTP 仅附带用于 tcp 和 udp 套接字的驱动程序 所以
  • 如何在osx上实现linux的inotify-tools shell方法

    要监视Linux中的文件 我可以使用inotify tools 如下所示 bin bash with inotify tools installed watch for modification of file passed as firs
  • 使用 wget 时如何从 URL 末尾删除 %0D?

    使用 wget 时如何从 URL 末尾删除 0D 我有一个带有以下 wget 的 sh 脚本 然而 当在 Linux 机器上执行时 wget 正在尝试下面的第二个 URL 附加 OD 我该如何防止这种情况发生 我有多个脚本 它们都有相同的问
  • 如何隐藏 Eclipse 项目中的所有错误?

    我从我的一位朋友那里接手了一个巨大的项目 我只想查看这些文件以了解他们实现的一些编码架构 在我的系统上 我没有这些 jar 和完整的代码 因此我的 Eclipse 显示了近 10 000 个错误 现在我仍然能够浏览代码 但是红色错误不允许我
  • 如何编写 Hibernate Criteria 通过投影列表获取嵌套对象?

    我想在 Hibernate 投影列表中获取嵌套对象值 我有 Pojo Charge 和 Tariff 类 具有 OneToMany 和 ManyToOne 关系 我的示例代码如下 Charge private String id priva
  • 无法将类型“object”隐式转换为“Microsoft.Office.Interop.Excel.Worksheet”。存在显式转换(您是否缺少强制转换?)

    在这里 我打开 Excel 并写入 Excel 工作表 我正在将 Windows 应用程序更改为 asp 网站并看到此错误 我已经添加了所有参考文献和库 不知道我在这里缺少什么 出现如下错误 请帮我 Excel Application ex
  • Signalr 不调用客户端函数

    我正在使用 VS2012 秋季 更新和 Signalr 1 0 0 包 调用服务器端函数工作正常 但是 不会调用客户端函数 当什么都没有发生时onBroadcastMessage 见下文 被称为 问题 我缺少什么 有没有办法调试客户端调用
  • 验证 Authenticode 签名是否来自我们公司以进行自动更新

    我正在实现自动更新功能 需要一些有关如何使用最佳实践安全地执行此操作的建议 我想使用下载的文件的 Authenticode 签名来验证它是否可以安全运行 即源自我们公司并且未被篡改 我的问题与问题 2008519 非常相似 最根本的问题是