如何从已签名的 .Net 程序集中读取数字签名信息?

11

我正在编写一个程序集信息应用程序,用于我们的软件构建过程,并试图从已签名的 .Net 程序集中读取数字签名信息。

我想在我的 C# 代码中做到像 Windows Explorer 右键单击已签名的程序集并选择“数字签名”选项卡,然后点击“详细信息”按钮所能实现的功能。例如:

Windows 7资源管理器可以通过右键单击文件属性实现

数字签名详细信息

有人知道如何在 C# 中以编程方式完成此操作吗?我目前正在使用 Mono Cecil 库获取程序集的其余信息。非常感谢您的帮助。


1
你展示的是 Authenticode 签名,适用于所有 PE 文件。还有一种 .NET 特定的签名格式,称为 strongnaming。Strongnaming 使用密钥对进行操作,而不是证书,因此你无法从 strongnamed assembly 中提取任何有用信息。在 StackOverflow 上搜索 Authenticode 将会给你提供大量有用的信息。 - Eugene Mayevski 'Callback
1
可能是重复的问题:如何从已签名的C# exe文件中读取公钥 - Hans Passant
成功了,X509Certificate.CreateFromSignedFile(exe) 真是太棒了。然而,它引发了一个异常,而不是空值,就像在 “如何从已签名的 C#exe 中读取公钥” 链接中所示。 - VinceJS
2个回答

6
Mono项目提供了signcodechktrust的源代码,您可以在自己的应用程序中重复使用(开源,MIT X11许可证)。
两者都使用Mono.Security.dll程序集(不仅适用于Linux和OSX,而且还适用于Windows),并包含完整的Authenticode支持

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接