Gar*_*ill 8 release code-signing digital-certificate digital-signature
我有一个使用各种第三方库(如JSON.NET)构建的应用程序.
我想确保构成我的应用程序的所有DLL都经过数字签名,包括第三方.鉴于这些未经作者签名,我是否可以/我应该自己签署第三方签名?
小智 12
只是试图(不成功)在互联网上找到同一个问题的答案.
我检查的结果是检查谷歌和Adobe如何交付他们的产品,并发现其文件夹中的每个二进制文件都已签名,包括第三方.
几个示例:1.谷歌浏览器包含pepflashplayer.dll,其版权归Adobe所有,但由"Google Inc."进行数字签名.2. Adobe Reader包含icudt40.dll,其版权归IBM所有,但由"Adobe Systems"进行数字签名.
因此,我认为最佳做法是签署构成应用程序的所有二进制文件,包括第三方文件.它是有道理的,因为它可以帮助您避免或至少轻易地检测到篡改,如果它发生在客户的机器上.
您是在谈论强命名还是真实代码签名?后者的问题是,当加载authenticode-signed程序集时,.NET会验证证书,并且在某些配置中(例如,当需要检查OCSP并且它无法访问时)这可能需要几十秒的时间。因此,我们不得不停止使用authenticode 和X.509 证书对程序集进行签名。
另一个缺点是,如果签名的程序集以某种方式被恶意软件使用,一些不称职的想成为防病毒公司专家的人可以(a)将程序集标记为恶意软件,(b)更糟糕的是,向证书颁发机构投诉颁发了您的代码签名证书,该证书将被撤销。
.NET 强命名(使用没有证书的密钥对)或多或少是您的私人事务。
更新:Authenticode通常应用于PE格式文件(EXE和DLL)、SYS和CAB。强命名是纯粹的.NET 技术。
警告消息涉及 Authenticode 签名。对安装程序进行签名是必要的(这是肯定的),并且足以消除该消息,除非系统策略设置为仅允许运行签名的应用程序(在这种情况下,应用程序的 EXE 也必须进行签名)。