我正在编写需要管理员权限的软件。弹出UAC对话框时,它会显示与未签名软件不同的数字签名软件弹出窗口。我相信对我的软件进行数字签名将使用户更容易信任我的软件。数字签名软件需要花费数千美元,还是免费的?有一个简单的方法吗?我搜索过谷歌,我得到的是如何签署PHP,XML和PDF文件,这不是我想要的。我需要签署我的软件可执行文件。
刚刚看到有关sigtool.exe的内容?这是正确的方向吗?那些复杂的.pfx文件和Authenticode怎么样呢?
答案 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)