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

C# 如何对可执行文件进行数字签名?,c#,digital-signature,C#,Digital Signature,我正在编写需要管理权限的软件。当UAC对话框弹出时,它会显示数字签名软件与非签名软件不同的弹出窗口。我相信对我的软件进行数字签名会让用户更容易信任我的软件。对软件进行数字签名需要花费数千美元,还是免费的?有简单的方法吗?我在谷歌搜索过,得到的只是如何对PHP、XML和PDF文件进行签名,这不是我想要的。我需要签署我的软件可执行文件 刚刚看到一些关于sigtool.exe的东西?这是正确的方向吗?那些复杂的.pfx文件和Authenticode怎么样?我不是在这里推销任何人,而是尝试一下。它们提供

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


刚刚看到一些关于sigtool.exe的东西?这是正确的方向吗?那些复杂的.pfx文件和Authenticode怎么样?

我不是在这里推销任何人,而是尝试一下。它们提供的正是您所需要的。

您可能需要阅读。

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

要对可执行文件进行签名,我使用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证书存储集成在一起。一旦它在下载计算机上的证书存储中,您就可以将它传输到生成计算机,并在那里导入它。如果您确实要导出它,我建议您使用密码保护导出的文件,以防它落入坏人之手

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


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

您需要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"

正如VeriSign在其说明()中所指出的那样,时间戳服务器的正确链接是“Note:“timstamp.dll”不包含字母“e”。我只看到一个任务。你说的这个“SignTool”任务是什么?@Will,这是一个自定义MSBuild任务,我创建它是为了包装SignTool.exe。基本上它是子类,这意味着几乎不涉及任何工作。消息来源太大,无法在评论中发表,但如果你愿意,我可以通过电子邮件发送给你,联系rich[at]prabang[dot]co[dot]uk