9

我有一个使用各种第三方库(例如 JSON.NET)构建的应用程序。

我想确保构成我的应用程序的所有 DLL 都经过数字签名,包括第三方的。鉴于这些不是作者签名的,我可以/应该自己简单地签署第三方吗?

4

2 回答 2

16

只是试图(不成功)在互联网上找到相同问题的答案。

结果,我检查了 Google 和 Adob​​e 如何交付他们的产品,发现他们文件夹中的每个二进制文件都经过签名,包括第三方的。

几个例子: 1. Google Chrome 包含 pepflashplayer.dll,它的版权归 Adob​​e,但由“Google Inc.”进行数字签名。2. Adob​​e Reader 包含ic​​udt40.dll,版权归IBM所有,但由“Adobe Systems”进行数字签名

因此,我认为最好的做法是对构成您的应用程序的所有二进制文件进行签名,包括第三方的。这是有道理的,因为它可以帮助您避免或至少轻松检测到发生在客户机器上的篡改。

于 2015-03-25T00:58:39.903 回答
4

您是在谈论强命名还是关于身份验证签名?后者的问题是,当加载验证码签名的程序集时,.NET 会验证证书,并且在某些配置中(例如,当需要检查 OCSP 并且无法访问时)这可能需要几十秒。因此,我们不得不停止使用验证码和 X.509 证书对我们的程序集进行签名。

另一个缺点是,如果已签名的程序集被恶意软件以某种方式使用,反病毒公司中一些不称职的想成为专家的人可以 (a) 将程序集标记为恶意软件,并且 (b) 更糟糕的是,向证书颁发机构投诉颁发您的代码签名证书,该证书将被吊销。

.NET 强命名(使用没有证书的密钥对)或多或少是您的私人业务。

更新:Authenticode 通常应用于 PE 格式文件(EXE 和 DLL)、SYS 和 CAB。强命名是纯 .NET 技术。

警告消息涉及 Authenticode 签名。对安装程序进行签名是必要的(这是肯定的),并且足以消除该消息,除非系统策略设置为仅允许运行签名的应用程序(在这种情况下,您的应用程序的 EXE 也必须签名)。

于 2012-10-29T14:56:18.963 回答