c++ - 使用什么来检查特定的 EXE 文件签名?

标签 c++ winapi authentication code-signing digital-certificate

我找到了 this MSDN article这解释了如何检索 Authenticode 签名的可执行文件的信息。它以下列格式检索数据:

Signer Certificate:

Serial Number: 00 90 1a 1a 1b 1c 1c 26 3d 4f 56 61 70 8f 94 7f e0
Issuer Name: COMODO Code Signing CA 2
Subject Name: Signer's Name

我的目标是验证 EXE 文件是否使用属于公司的特定签名证书签名。为此,我显然可以检查 Subject Name,但我对 Serial Number 感到好奇:

  1. 是否可以使用序列号 来验证 EXE 文件是否使用特定证书签名?我的测试表明,如果我签署多个文件,它不会改变。

  2. 续订证书时,此序列号会保持不变吗?

最佳答案

IssuerRDN(标识颁发者的字段集)和 SerialNumber 字段的组合根据 RFC 5280 唯一标识证书.

RFC 没有定义,如果重新颁发证书会发生什么,但我会假设序列号已更改。原因是新证书将不同于以前的证书,因此必须唯一标识它。

因此,对于您的任务,更好的方法是

  1. 完全验证证书链以确保证书的完整性和真实性
  2. 检查发行人名称
  3. 检查主题名称
  4. 检查 key 使用字段。

这将确保该证书对该公司有效且已获得授权,同时该算法使您免于只检查一个证书的错误(如果证书因任何原因被吊销,此错误可能会导致麻烦并更换为新的)。

关于c++ - 使用什么来检查特定的 EXE 文件签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17893039/

相关文章:

http - 当 API 使用 Introspection 进行 HTTP token 身份验证时,如果 Introspection 服务器关闭或返回 500,它应该返回什么?

c++ - 解释这个素数程序 [C]

C++错误从文件中读取值

windows - 如何停止资源管理器启动我的应用程序最大化?

c - 我的 Win32 应用程序不会退出主循环

cookies - 我应该在 Cookie 的哈希值中使用用户的 IP 地址吗?

包含唯一指针成员变量的类的 C++ 赋值运算符

c++ - 如何在 MacOS X 上安装 g++?

c++ - 在 Win32/C++ 中获取已安装的 Flash ActiveX 的版本

laravel - 将 Laravel 多授权用户视为一个独特的用户类