寻求有关 .NET 签名方案/策略的建议



我正在寻找一些有关管理 Visual Studio .NET 应用程序签名的顶级指南。

我们有越来越多的应用程序,包括桌面,包装库,插件等,一切都是.NET,通常是VB,但越来越多的C#,尽管这并不重要。

到目前为止,我们一直在使用 VS 生成的特定于应用程序的个人信息交换(.pfx( 文件对程序集进行签名,这些文件以应用程序命名(例如"TheProduct.pfx"(。(这些需要密码,否则会生成.snk文件。

但是在最近需要重新签名程序集(混淆后(,花几个小时弄清楚为什么SignTool尝试使用 VS 生成的证书时抛出错误并且必须从头开始创建一个证书之后,我突然想到也许我们应该更认真地对待这个问题。

现在,我的想法是一两个方向,要么

创建以后用于
  1. 所有应用程序的通用证书,或者
  2. 坚持使用当前特定于应用程序的证书方案,但通过使用MakeCert/Pvk2Pfx稍微强化证书,以确保在需要时(再次(SignTool可以使用它们。

(我们显然也会在通用情况下使用MakeCert/Pvk2Pfx

另外,我想知道使用的最佳"结构"。例如,使用SHA256SHA512代替SHA1,将密钥长度增加到 2048 甚至 4096(撰写本文时可接受的最小值为 1024(,使用专用的超级密码(即生成和长的东西(等。

顺便说一句,由于能够将密码与前者一起使用,我特别提到了.pfx超过.snk。但我在这里也愿意接受建议。我们可能不会接受的一件事是来自Comodo等权威机构的证书过期;我们不喜欢我们的产品在新年前夜死在客户身上的想法!

所以,请让我知道你的想法。谢谢。

在工作中,我们只有用C++编写的非托管/本机应用程序,因此对应用程序本身进行签名的详细信息会有所不同。

对于所有应用程序,我们使用来自Thawte的单个普通(非EV(SHA-256代码签名证书。 不需要多个证书,因为只需要一个证书来证明这三件事:

  • 该申请由我们公司的某人签署。
  • 应用程序在特定日期时间签名(我们目前从服务器 http://sha256timestamp.ws.symantec.com/sha256/timestamp 获取时间戳(。
  • 应用程序自签名以来甚至没有更改过一个字节 * 。

使用单个证书还有助于通过Microsoft的 SmartScreen 安全性和可能的其他安全代码更快地建立信任。

签名过期:如果为签名工具(如 MS 的 SignTool(提供了有效的时间服务器 URL,则时间戳将成为签名的一部分。 发生这种情况时,签名不会在证书过期时过期,它是"永久"有效的。

带有时间戳的示例签名:

"C:Program Files (x86)Windows Kits10App Certification KitSignTool.exe" sign /f c:thawte256cert256.pfx /p mypassword /as /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp  /v "C:VS17AppNameeReleaseAppName.exe"

相同的代码签名证书也可以与安装应用程序(如 InstallShield(一起使用,以对其创建的 MSI 或 EXE 进行签名。

* 我意识到存在针对签名的理论攻击,其中生成的不同内容散列为相同的值,但这不是正常使用的真实问题。

相关内容

最新更新