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

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

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

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

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

         

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

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

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

您需要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 。 他们提供代码签名 ,这是您正在寻找的。

您可能希望阅读使用Authenticode签名和检查代码 。