我应该对第三方DLL(如JSON.NET)进行数字签名吗?

Gar*_*ill 8 release code-signing digital-certificate digital-signature

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

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

小智 12

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

我检查的结果是检查谷歌和Adobe如何交付他们的产品,并发现其文件夹中的每个二进制文件都已签名,包括第三方.

几个示例:1.谷歌浏览器包含pepflashplayer.dll,其版权归Adobe所有,但由"Google Inc."进行数字签名.2. Adob​​e Reader包含icudt40.dll,其版权归IBM所有,但由"Adobe Systems"进行数字签名.

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


Eug*_*its 4

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

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

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

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

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

  • 这实际上并不能回答问题。问题是“应该”签署第三方库和应用程序,它不询问authenticode签名的优缺点。我从谷歌上看到了这个答案,我对这是我找到的答案感到非常失望。 (11认同)