【问题标题】:Seeking Advice On .NET Signing Regimen/Strategy寻求有关 .NET 签名方案/策略的建议
【发布时间】:2018-07-08 19:57:48
【问题描述】:

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

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

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

但是在最近需要重新签署程序集(经过混淆处理后)之后,在尝试使用 VS 生成的证书并且必须从头开始创建证书时,花了一些时间弄清楚为什么 SignToolthrowing an error,我突然想到,也许我们应该更认真地对待这件事。

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

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

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

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

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

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

【问题讨论】:

  • 这是否仅供公司内部使用?由于我们的(本机 C++)应用程序被我们公司以外的客户使用,我们拥有来自 Thwate 的“真实”代码签名证书(纯非扩展验证)。请注意,这是错误的,至少对于 EXE 而言:“我们可能不会使用的一件事是让 Comodo 等权威机构的证书过期;...” - 如果使用时间戳签名,则签名不会在以下情况下过期证书可以。如果在 2016 年使用 2016 年的证书签署,它在 2099 年仍然有效。
  • 谢谢@DaveS。这些应用程序是商业的、公开的,但这个小东西已经悄悄地爬上了我们。你想为这个问题提供一个完整的答案吗?我假设您将这个单一证书用于您的所有应用程序,不是吗?也感谢您对到期的澄清。

标签: .net code-signing strongname


【解决方案1】:

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

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

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

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

带有时间戳的签名示例:

"C:\Program Files (x86)\Windows Kits\10\App Certification Kit\SignTool.exe" sign /f c:\thawte256\cert256.pfx /p mypassword /as /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp  /v "C:\VS17\AppNamee\Release\AppName.exe"

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多