【问题标题】:what happens to exe when we sign it?当我们签署它时,exe会发生什么?
【发布时间】:2011-04-17 15:03:59
【问题描述】:

使用 VeriSign 对 exe 进行签名后,如果我们右键单击 exe,我们可以看到“数字签名”选项卡,其中提供了有关证书的信息。这些信息将存储在哪里?我的意思是操作系统将如何知道哪个证书与哪个文件相关?签名时是否在exe中嵌入了任何内容?如何编写 c# 代码从签名的 exe 中提取证书?

非常感谢任何帮助。

更新: 我解决了问题,尽管我无法找到与程序集存储的证书关系的准确程度。我们可以通过传递汇编路径来创建 X509Certificate 对象。我的任务是获取序列号和所有者。以下是我为此编写的代码。

 X509Certificate cert = X509Certificate.CreateFromSignedFile("Solo4Orchestra.exe");
            MessageBox.Show(cert.Subject.Split(new char[1]{','})[3].Replace("O=",""));
            MessageBox.Show(cert.GetSerialNumberString());

谢谢。 秋惠

【问题讨论】:

    标签: .net cryptography digital-signature digital-certificate


    【解决方案1】:

    Windows Authenticode Portable Executable Signature Format 可能会为您提供有关二进制格式的一些信息。

    有一个用于检查签名的 Windows API,CryptQueryObject()。也许还有一个.NET API,但显然没有:Arelated MSDN article with sample code to get revocation list也使用Windows API调用,因为它看起来:How to get information from a CRL (.NET)(可能是一个很好的起点,因为它实现了一个包装器那个函数)。

    【讨论】:

      【解决方案2】:

      如上所述,它是 Authenticode 签名格式。据我所知,我们的 PKIBlackbox 组件是唯一支持 .NET 中的 Authenticode(签名和验证)的组件。

      【讨论】:

      • 免费的替代方案当然是对 Windows API 进行包装。
      • @Archimedix 当然,可以使用 P/Invoke,但主要任务不是检查签名,而是正确验证证书。证书验证是一个非常复杂的过程(它涉及检查 CRL、OCSP 服务器、验证二级证书链等)。而且没有可用的 .NET OCSP 客户端(除了我们的 PKIBlackbox)。
      猜你喜欢
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 2010-12-10
      • 1970-01-01
      • 2013-04-18
      • 2014-03-31
      相关资源
      最近更新 更多