如何对可执行文件进行数字签名?

时间:2010-06-27 17:37:46

标签: c# digital-signature

我正在编写需要管理员权限的软件。弹出UAC对话框时,它会显示与未签名软件不同的数字签名软件弹出窗口。我相信对我的软件进行数字签名将使用户更容易信任我的软件。数字签名软件需要花费数千美元,还是免费的?有一个简单的方法吗?我搜索过谷歌,我得到的是如何签署PHP,XML和PDF文件,这不是我想要的。我需要签署我的软件可执行文件。

刚刚看到有关sigtool.exe的内容?这是正确的方向吗?那些复杂的.pfx文件和Authenticode怎么样呢?

4 个答案:

答案 0 :(得分:19)

如其他答案中所述,您首先需要购买适合代码签名的证书。这将花费几百美元,远不及一千。当我最近用Globalsign更新我公司的证书时,还有一项调查来检查公司是否合法 - 因为我在注册过程中使用手机号码,他们想要公司会计师的一封信来验证我们是一个真正的业务。

要签署可执行文件,我使用MSBuild任务。以下是相关部分的摘录:

<!--
Installer files that need to be signed.
-->
<ItemGroup>
  <InstallerSignedFiles Include="$(BuildRoot)path\to\myinstaller.msi"/>
  <InstallerSignedFiles Include="$(BuildRoot)path\to\setup.exe"/>
</ItemGroup>

<Target Name="ReleasePackaging">
  <!-- Sign the files we're going to release -->
  <SignTool
      CertificateStoreName="My"
      CertificateSubjectName="MyCompany"
      Description="My application description"
      TimestampServerUrl="http://timestamp.verisign.com/scripts/timstamp.dll"
      TargetFiles="@(InstallerSignedFiles)"
     />
</Target>

为此,您需要将证书安装到个人证书存储区中(请参阅上例中的CertificateStoreName="My")。在Globalsign网站上,此安装是证书下载过程的自动部分。注意:我发现在下载证书时使用Internet Explorer会有所帮助,因为它与Windows证书存储区集成在一起。一旦它在下载计算机上的证书存储中,您可以export it as a pfx file,将其传输到您的构建计算机,然后将其导入。如果您确实将其导出,我建议您使用密码保护导出的文件,以防它落入坏人之手。

当您使用上述SignTool MSBuild任务时,它会从与当前Windows用户帐户关联的个人存储(“我的”)中读取证书。这意味着您可以控制谁可以使用您的证书签署代码,这是一件好事。您只应将证书导入您信任的开发人员的个人存储区。

在签名代码时使用时间戳服务器是个好主意,这样您就不需要在证书过期时重新签名代码。

答案 1 :(得分:11)

您需要Microsoft提供的代码签名命令行实用程序。

然后:

signtool.exe sign /v /f "MyCertificate.pfx" -t "http://timestamp.verisign.com/scripts/timstamp.dll" "MyApp.exe"

或替代

signcode.exe -a "sha1" -spc "MySoftwarePublishingCertificate.spc" -v "MyPrivateKeyFile.pvk" -t "http://timestamp.verisign.com/scripts/timstamp.dll" "MyApp.exe"

答案 2 :(得分:4)

我不是在这里营销任何人,而是尝试VeriSign。他们提供Code signing这就是你要找的东西。

答案 3 :(得分:1)