对具有引用程序集的应用程序进行数字签名的正确方法

本文关键字:数字签名 方法 应用程序 引用 程序集 | 更新日期: 2023-09-27 18:33:20

我有一个应用程序有 1 个引用的程序集(test.exe、test.dll(

我想要的是当test.exe运行时,它应该将发布者名称显示为"TestCompany"。

为此,我对它进行了数字签名,它做了我想做的事。如果我更改test.exe的一个字节,发布者名称为"未知"。这很好。

但是如果我更改test.dll,该应用程序将像什么都没有发生一样运行,并将发布者名称显示为"TestCompany"。这对我不好。

所以我在test.dll上加上了强名称,并在 app.config 中添加了<bypassTrustedAppStrongNames enabled="false" />

同样,没有区别。所以我再次搜索,发现bypassTrustedAppStrongNames只检查程序集是否具有强名称。不是验证。这又对我不好。

我真正想要的是保护用户,而不是我的应用程序。如果用户运行我的应用程序并且它说它来自我,那么它必须来自我作为每个字节。如果应用程序被更改,即使是单个字节,它也必须通知用户,而不是来自我。这就是数字签名应该与强名称一起做的事情,但它们似乎都不是那么好。还是我错过了什么?

我能想到的最后一种可能的方法是手动检查程序集的强名称。

PS : 目标 .net 框架是 2.0

对具有引用程序集的应用程序进行数字签名的正确方法

我的大多数重要程序集都没有作为参考加载到我的项目中。我所做的是声明互操作接口(所有项目通用作为基础...是的,这是引用的。然后我在运行时使用以下方法加载所有程序集:

 Assembly assembly = Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");
 Type type = assembly.GetType("MyClass");
 object instanceOfMyType = Activator.CreateInstance(type);

我使用它有几个原因。我有不同的类实现,我必须根据用户/客户配置调用这些实现。这似乎也是一个不错的选择,可以保证您使用我的公共令牌和版本加载特定程序集。

经过一番研究,我发现了这些帖子:

  • 如何防止在 .NET 中欺骗 DLL
  • http://ianpicknell.blogspot.com.br/2010/02/evading-strong-name-integrity-check.html

好吧,看完你的问题后我有点震惊..这引起了我对现在引用我的 DLL 的担忧。我不知道这有多安全,但它似乎比仅仅引用它更安全。

我在 MS 文档中没有找到任何关于使用 Assembly.LoadbypassTrustedAppStrongNames 的参考。我稍后会运行一些测试,但使用它似乎更安全。