如何在Windows上创建用于代码签名的自签名证书?
如何使用Windows SDK中的工具创建用于代码签名的自签名证书?
解决方案
回答
更新的答案
如果我们使用以下Windows版本或者更高版本:Windows Server 2012,Windows Server 2012 R2或者Windows 8.1,则现在不建议使用MakeCert,并且Microsoft建议使用PowerShell Cmdlet New-SelfSignedCertificate。
如果我们使用的是Windows 7等旧版本,则需要坚持使用MakeCert或者其他解决方案。有人建议使用公钥基础结构Powershell(PSPKI)模块。
原始答案
虽然我们可以一次性创建自签名代码签名证书(SPC软件发布者证书),但我更喜欢执行以下操作:
创建自签名证书颁发机构(CA)
makecert -r -pe -n "CN=My CA" -ss CA -sr CurrentUser ^ -a sha256 -cy authority -sky signature -sv MyCA.pvk MyCA.cer
(^ =允许批处理命令行换行)
这将创建带有可导出私钥(-pe)的自签名(-r)证书。它的名称为"我的CA",应放在当前用户的CA存储中。我们正在使用SHA-256算法。该密钥用于签名(-sky)。
私钥应存储在MyCA.pvk文件中,证书应存储在MyCA.cer文件中。
导入CA证书
因为如果我们不信任CA证书就没有意义,因此需要将其导入Windows证书存储区。我们可以使用"证书" MMC管理单元,但可以从命令行使用:
certutil -user -addstore Root MyCA.cer
创建代码签名证书(SPC)
makecert -pe -n "CN=My SPC" -a sha256 -cy end ^ -sky signature ^ -ic MyCA.cer -iv MyCA.pvk ^ -sv MySPC.pvk MySPC.cer
与上面的内容几乎相同,但是我们提供了颁发者密钥和证书(-ic和-iv开关)。
我们还希望将证书和密钥转换为PFX文件:
pvk2pfx -pvk MySPC.pvk -spc MySPC.cer -pfx MySPC.pfx
如果要保护PFX文件,请添加-po开关,否则PVK2PFX将创建没有密码短语的PFX文件。
使用证书签名代码
signtool sign /v /f MySPC.pfx ^ /t http://timestamp.url MyExecutable.exe
(请参阅为什么时间戳可能很重要)
如果将PFX文件导入证书存储中(可以使用PVKIMPRT或者MMC管理单元),则可以按以下方式对代码签名:
signtool sign /v /n "Me" /s SPC ^ /t http://timestamp.url MyExecutable.exe
signtool / t的一些可能的时间戳URL是:
http:// timestamp.verisign.com / scripts / timstamp.dll
http:// timestamp.globalsign.com / scripts / timstamp.dll
http:// timestamp.comodoca.com / authenticode
完整的Microsoft文档
- 标志工具
- 制造证书
- pvk2pfx
资料下载
对于不是.NET开发人员的用户,我们将需要Windows SDK和.NET框架的副本。当前链接可在此处找到:SDK和.NET(将makecert安装在" C:\ Program Files \ Microsoft SDKs \ Windows \ v7.1"中)。你的旅费可能会改变。
可从Visual Studio命令提示符中获得MakeCert。 Visual Studio 2015确实具有此功能,可以从Windows 7的"开始菜单"下的" VS 2015开发人员命令提示符"或者" VS2015 x64本机工具命令提示符"(可能它们都在同一个文件夹中)启动。