c# - 如何以编程方式验证程序集是否使用特定证书签名?

标签 c# .net digital-certificate assembly-signing

我的方案是我们有一个程序 (exe),如果在特定文件夹中找到该程序,它将启动其他程序。我想确保它只会启动使用我们的公司证书(Verisign 批准等)签名的程序。本质上,它只会启动与自身具有相同证书的程序。我不想发送证书本身。

我一直在网络和系统命名空间中搜索,但没有找到一个明确的示例来从文件中读取证书数据并对其进行验证,并且可以检查另一个文件。我找到的最接近的是 Signtool,并且在单独的 exe 中进行此验证有点意义不大。我知道强命名的东西不会有帮助,因为数字签名的文件是不同的,因为这里有帮助解释(http://blog.codingoutloud.com/2010/03/13/three-ways-to-tell-whether-an-assembly- dl-is-strong-named/) SO 中的其他一些示例显示原始数据的加密和验证,但不是以某种方式打包在一起的程序集。

有什么想法或建议吗?

最佳答案

这是一篇博客文章,其中包含有关如何验证程序集签名的代码示例:
http://blogs.msdn.com/b/shawnfa/archive/2004/06/07/150378.aspx

最后的代码示例展示了如何验证程序集是否由 Microsoft 签名 - 您可以通过获取公司证书的证书 token 来执行相同的操作。

更新:用户@Saber 使用以下更新编辑了此更新,但该更新被其他人拒绝了。然而,这是非常有效的建议,所以我重新发布他/她的编辑,因为 SO 不会让我批准它:

编辑(谢谢 OP):如果您想更安全地执行此操作(即让您的程序更防篡改),请在您的程序中引用一个使用相关 key 强命名的程序集,然后使用要与调用程序集的标记进行比较的引用程序集的标记。如果您使用字节数组(根据链接),它可以简单地进行十六进制编辑和更改。

关于c# - 如何以编程方式验证程序集是否使用特定证书签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5013024/

相关文章:

c# - 警报弹出窗口中的换行符

java - 在 OCR(光学字符识别)之前,您会推荐什么软件进行图像增强?

c++ - PEM_read_X509 未读取整个证书

c# - 属性的代码如何知道它应用于什么类型?

c# - 我需要帮助在 C# 中使用 <string, char> 格式的字典

ssl - 如何在计算机上安装 SSL 证书

c# - 在 C# 中,使用 x.509 证书签署 xml 并检查签名

c# - 在ViewModel中修改后,String属性在View中不会更新

c# - 如何使用 dapper.net 进行交易?

c# - 如何修复 GMail SMTP 错误 : "The SMTP server requires a secure connection or the client was not authenticated."