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

xme*_*men 21 .net c# strongname digital-certificate .net-assembly

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

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

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

但是,如果我改变了test.dll,应用程序运行时没有任何反应,并将发布者名称显示为"TestCompany".哪个对我不好.

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

再一次,没有区别.所以我再次搜索并发现bypassTrustedAppStrongNames只检查程序集是否具有强名称.不是验证.这对我来说再好不过了.

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

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

PS:目标.net框架是2.0

rod*_*ogq 1

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

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

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

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

嗯,看到你的问题后我有点震惊。它让我担心现在引用我的 DLL。我不知道这有多安全,但它似乎比仅仅引用它更安全。

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

  • 是的,我一直在互联网上阅读,这些链接就是其中之一,强名称似乎已损坏,而且它使用了 SHA1。Microsoft 推出了使用 SHA256 的“EnhancedStrongName”,但它来自 .net 4.5。 (3认同)