如何在Windows上创建用于代码签名的自签名证书?

时间:2020-03-05 18:59:15  来源:igfitidea点击:

如何使用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本机工具命令提示符"(可能它们都在同一个文件夹中)启动。