【发布时间】:2018-07-08 19:57:48
【问题描述】:
我正在寻找有关管理 Visual Studio .NET 应用程序签名的顶级指南。
我们有越来越多的应用程序,包括桌面、包装库、插件等。一切都是 .NET,通常是 VB,但越来越多的是 C#,尽管这并不重要。
迄今为止,我们一直在使用 VS 生成的特定于应用程序的个人信息交换 (.pfx) 文件对程序集进行签名,这些文件以应用程序命名(例如“TheProduct.pfx”)。 (这些需要密码,否则会生成.snk 文件。)
但是在最近需要重新签署程序集(经过混淆处理后)之后,在尝试使用 VS 生成的证书并且必须从头开始创建证书时,花了一些时间弄清楚为什么 SignTool 是 throwing an error,我突然想到,也许我们应该更认真地对待这件事。
现在,我的想法是一两个方向,要么
- 创建一个通用证书,以后用于所有应用程序,或者
- 坚持当前的特定于应用程序的证书方案,但通过使用
MakeCert/Pvk2Pfx稍微加强证书,以确保SignTool可以在需要时(再次)使用它们。
(我们显然也会在通用情况下使用MakeCert/Pvk2Pfx。)
另外,我想知道要使用的最佳“结构”。例如,使用SHA256 或SHA512 而不是SHA1,将密钥长度增加到2048 甚至4096(在撰写本文时,1024 是可接受的最小值),使用专用的超级密码(即生成的东西和长)等。
顺便说一句,我特别提到.pfx 而不是.snk,因为前者可以使用密码。但我也愿意接受这里的建议。我们可能不会使用的一件事是使 Comodo 等权威机构的证书过期;我们不喜欢我们的产品在新年前夜就死在客户身上的想法!
所以,请让我知道你的想法。谢谢。
【问题讨论】:
-
这是否仅供公司内部使用?由于我们的(本机 C++)应用程序被我们公司以外的客户使用,我们拥有来自 Thwate 的“真实”代码签名证书(纯非扩展验证)。请注意,这是错误的,至少对于 EXE 而言:“我们可能不会使用的一件事是让 Comodo 等权威机构的证书过期;...” - 如果使用时间戳签名,则签名不会在以下情况下过期证书可以。如果在 2016 年使用 2016 年的证书签署,它在 2099 年仍然有效。
-
谢谢@DaveS。这些应用程序是商业的、公开的,但这个小东西已经悄悄地爬上了我们。你想为这个问题提供一个完整的答案吗?我假设您将这个单一证书用于您的所有应用程序,不是吗?也感谢您对到期的澄清。
标签: .net code-signing strongname