代码签名问题

Code signing problems

精简版

我在使用 Windows 7/Signtool.exe 签署我的代码时遇到了一些麻烦,我正在寻求一些 advice/clarification 如何处理以下问题:当我尝试签署一个Windows 7 上的 .exe 代码文件,使用 signtool 和 /as 选项,signtool 不起作用,它抱怨我试图使用一些不受支持的选项。不使用 /as 签名适用于 Windows 7,使用 /as 签名适用于 Windows 8.1 和 Windows 10.

  1. 是否有人在 WIndows 7 上使用 /as 进行签名?

  2. 如果文件上只有一个签名,为什么有人要使用 /as?

长版

有人建议我对我的 .exe 文件进行签名,主要是为了让 Windows 关于软件来源不明的警告消失,并且我这样做了很多年而没有考虑太多。我使用了 signtool 和客户提供的 pfx 文件,一切正常。该软件面向全球客户销售,需要 运行 Windows XP 及更高版本。没有经验的用户可能会被软件可能存在危险的警告所困扰,这就是多年前实施签名的原因。

最近 pfx 文件过期。连同新的有效证书(Verisign/Geotrust)我得到了指示,新文件现在(支持?需要?强制/使用?)sha256,我需要使用以下命令行来签署我的代码:

"signtool.exe" sign /n "..." /d "..." /du "..." /as /fd sha256 /tr "http://timestamp.geotrust.com/tsa" "<.exe file name>"

我将新的 pfx 导入到我的证书库中,删除了旧的(无论如何都过期了)并试了一下,但是在我的开发机器上(Windows 7 x64)这给了我一个错误来自 signtool 的消息:

SignTool Error: A required function is not present.
This error likely means that you are running SignTool on an OS that
does not support the options you've specified.

我在 Windows 8.1 机器上试过,命令有效。我的客户试用了他的 Windows 10 机器,它也能正常工作。

通过反复试验,我发现 /as 选项导致了问题,如果我省略它,我也可以在 WIndows 7 上登录。消息似乎是正确的,但是当我阅读 Microsoft (https://msdn.microsoft.com/de-de/library/8s9b9yaz%28v=vs.110%29.aspx#sign) 的文档时,没有任何声明 /as 选项依赖于 OS 版本。所以我怀疑可能还有其他需要更新的东西,但由于我已经安装了最新的 .net Framework (4.5.1),并且没有列出其他依赖项,我还能更新什么?将我的开发平台移动到 Windows 8 或 Windows 10 也不是我现在喜欢做的事情。

我考虑过简单地省略 /as 选项。它似乎处理附加到一个文件的多个签名。如果我按照客户的要求,无论如何他只想要一个签名(sha256 变体,使用新证书)。

当我提出这个问题时,我的客户回答说,他从他购买证书的地方获得了一些技术人员提供的示例 signtool 代码行。在他的测试机器 (Windows 10) 上,他发现它可以正常工作。他不在乎我是否省略该选项,如果我保证这样做没有任何不利影响。我没有看到任何东西,因为就像我解释的那样,文件上只有一个签名,所以在我看来,附加另一个签名的选项是多余的。

不过,我不是 100% 确定。

windows7 sdk 没有/as 选项。您必须升级到 Win 8.1 或更高版本。

signtool 符号/?

应该显示所有选项。