【问题标题】:How to correctly sign an executable如何正确签署可执行文件
【发布时间】:2013-05-16 09:39:06
【问题描述】:

我做了一个小工具。它是一个控制台应用程序,在 Win7 上运行时会带来 UAC 安全提示。 我尝试使用以下步骤在 Visual Studio 2010 中签署此 EXE 文件:

  1. 项目属性
  2. 签名
  3. 如下图所示创建新密钥

密钥文件已成功创建,如下面的截图所示。

问题:

文件仍被 UAC 安全提示阻止。当我使用signtool.exe检查文件是否签名时,它告诉我,没有找到签名。 如果我按照错误的步骤进行操作,请纠正我。

【问题讨论】:

标签: c# visual-studio-2010 uac digital-signature


【解决方案1】:

程序集签名!= Authenticode 签名。

要使用 signtool 对程序集进行身份验证,您需要来自受信任的颁发机构的代码签名证书。

然后您可以发出以下构建后命令来签署您的可执行文件:

"signtool.exe" sign /f "$(SolutionDir)myCertificate.pfx" /p certPassword /d "description" /du "http://myinfourl" /t "http://timeserver.from.cert.authority/" $(TargetPath)

Everything you need to know about Authenticode Code Signing

【讨论】:

  • 工作正常,此外,许多参数在上面的命令中是可选的。这就是我使用的:signtool sign /f MyCert.pfx /p MyPassword MyApp.exe
  • 没有 GUI 方法可以做到这一点吗?
【解决方案2】:

基本上你有 2 个选项,使用手动执行或通过批处理文件执行的命令

signtool.exe sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /f "D:\Source\Certificates\CodeSign.pfx" /as /p MyPassword "{path to exe}"

一段时间后变得有点沮丧 最好将其添加到 Build Events 中项目的选项页面上。

在您的后期构建中,您将输入

call "C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /f "D:\Source\Certificates\CodeSign.pfx" /p MyPassword  $(TargetPath)

$(TargetPath) 将填充您编译的 exe 或 dll 的路径。

现在每次编译都会得到一个签名文件。

看起来像这样:

【讨论】:

  • 对了,你可以从微软下载signtool.exe,google“Window Kits Download”有不少,我用的是windows 10所以我会用developer.microsoft.com/en-us/windows/downloads/windows-10-sdk
  • 谢谢,这就是我要找的!就我而言,因为我的路径太长了,我不得不将宏用引号括起来,即 - "$(TargetPath)"
  • 不客气。请注意,您还可以使用digicert.com/util 对 exe 和 dll 进行签名,这是一个很好的工具,因为它还可以让您解决证书问题
猜你喜欢
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 2021-10-18
  • 1970-01-01
  • 2020-07-15
相关资源
最近更新 更多