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