【问题标题】:run customized version of third party assembly without strong name signature运行没有强名称签名的第三方程序集的定制版本
【发布时间】:2017-05-12 16:27:46
【问题描述】:

我想对程序集(mysql 连接器网络)进行更改,我成功构建了 dll,但是当我尝试运行我的 Web 解决方案时,我得到:

无法加载文件或程序集“MySql.Data”或其依赖项之一。无法验证强名称签名。程序集可能已被篡改,或者它被延迟签名但未使用正确的私钥完全签名。

当然,我在构建 dll 时没有要签名的强名称密钥文件。

如何让我的项目识别 dll 而无需使用强名称签名进行验证?还是有其他解决方法?

【问题讨论】:

    标签: mysql asp.net strongname


    【解决方案1】:

    这里可能发生了一些事情,它们需要一些工作才能解决。

    MySql.Data 是强名称签名的。要生成其他已编译代码可以引用的 MySql.Data.dll 文件,您需要有权访问用于签署 MySql.Data.dll 文件的密钥对。您无权访问它,只有 MySql 人员才能访问(无论如何,我们希望如此),因为泄漏这将允许某人创建恶意的 MySql.Data.dll 并让其他引用它的组件使用该 .dll。强命名旨在防止这种情况。

    我的猜测是 MySql.Data 项目配置为延迟使用密钥对的公共部分对 .dll 进行签名。您没有该密钥对的私有部分,因此您无法自己完成签名过程。

    解决方案是生成一个新的 key.snk 文件,将项目配置为使用 那个 密钥,禁用该项目的延迟签名并重建。

    您将遇到的问题是引用MySql.Data.dll 的任何其他库都将使用正确的MySql.Data.dll 中使用的强名称来执行此操作。因此,您使用的任何其他引用 MySql.Data.dll 的库都需要使用 您的库 现在拥有的强名称修改其引用。

    您需要修改这些库的引用(通过获取源代码或使用ildasm.exe)。然后,您必须更改引用以使用具有新强名称的 your 库并重建这些库。如果这些引用是也是强名称签名的,您将不得不使用新密钥辞职,并对引用那个库的任何库重复相同的过程。

    您可以想象这会如何迅速失控。如果可能的话,更好的选择是创建一个引用MySql.Data.dll 的新库,并扩展您自定义的类/组件,而无需触及MySql.Data.dll 库的代码。这可能会,也可能不会,取决于您针对该库更改了哪些行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      相关资源
      最近更新 更多