当前位置:  开发笔记 > 编程语言 > 正文

如何在Windows上为代码签名创建自签名证书?

如何解决《如何在Windows上为代码签名创建自签名证书?》经验,为你挑选了5个好方法。

如何使用Windows SDK中的工具为代码签名创建自签名证书?



1> Roger Lipsco..:

更新的答案

如果您使用的是以下Windows版本或更高版本:Windows Server 2012,Windows Server 2012 R2或Windows 8.1,则现在不推荐使用MakeCert,Microsoft建议使用PowerShell Cmdlet New-SelfSignedCertificate.

如果您使用的是Windows 7等旧版本,则需要坚持使用MakeCert或其他解决方案.有些人建议使用Public Key Infrastructure 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

一些可能的时间戳URL signtool /t是:

http://timestamp.verisign.com/scripts/timstamp.dll

http://timestamp.globalsign.com/scripts/timstamp.dll

http://timestamp.comodoca.com/authenticode

完整的Microsoft文档

signtool

makecert

pvk2pfx

下载

对于那些不是.NET开发人员的人,您需要一份Windows SDK和.NET框架.此处提供了当前链接:SDK和.NET(安装makecert C:\Program Files\Microsoft SDKs\Windows\v7.1).你的旅费可能会改变.

MakeCert可从Visual Studio命令提示符获得.Visual Studio 2015确实拥有它,它可以从Windows 7的"开发人员命令提示符VS 15"或"VS2015 x64 Native Tools命令提示符"(可能所有这些都在同一文件夹中)的"开始"菜单中启动.


+1表示示例和使用时间戳.
@cronoklee要填充证书的电子邮件字段,只需添加"E = your @ email"即可.例如:`makecert -pe -n"CN =我的SPC,E = email @ domain"........`

2> 小智..:

罗杰的回答非常有帮助.

但是,我在使用它时遇到了一些麻烦,并且不断得到红色的"Windows无法验证此驱动程序软件的发布者"错误对话框.关键是要安装测试根证书

certutil -addstore Root Demo_CA.cer

罗杰的答案并没有完全覆盖.

这是一个适合我的批处理文件(使用我的.inf文件,不包括在内).它显示了如何从头到尾完成所有操作,根本没有GUI工具(除了一些密码提示).

REM Demo of signing a printer driver with a self-signed test certificate.
REM Run as administrator (else devcon won't be able to try installing the driver)
REM Use a single 'x' as the password for all certificates for simplicity.

PATH %PATH%;"c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin";"c:\Program Files\Microsoft SDKs\Windows\v7.0\Bin";c:\WinDDK\7600.16385.1\bin\selfsign;c:\WinDDK\7600.16385.1\Tools\devcon\amd64

makecert -r -pe -n "CN=Demo_CA" -ss CA -sr CurrentUser ^
   -a sha256 -cy authority -sky signature ^
   -sv Demo_CA.pvk Demo_CA.cer

makecert -pe -n "CN=Demo_SPC" -a sha256 -cy end ^
   -sky signature ^
   -ic Demo_CA.cer -iv Demo_CA.pvk ^
   -sv Demo_SPC.pvk Demo_SPC.cer

pvk2pfx -pvk Demo_SPC.pvk -spc Demo_SPC.cer ^
   -pfx Demo_SPC.pfx ^
   -po x

inf2cat /drv:driver /os:XP_X86,Vista_X64,Vista_X86,7_X64,7_X86 /v

signtool sign /d "description" /du "www.yoyodyne.com" ^
   /f Demo_SPC.pfx ^
   /p x ^
   /v driver\demoprinter.cat

certutil -addstore Root Demo_CA.cer

rem Needs administrator. If this command works, the driver is properly signed.
devcon install driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F

rem Now uninstall the test driver and certificate.
devcon remove driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F

certutil -delstore Root Demo_CA


如果要将其用于签名驱动程序,则需要将CA证书导入到计算机存储中.我的示例将其导入到用户存储中,这对于大多数软件来说都很好,用于测试/内部目的.

3> chaami..:

如答案中所述,为了使用非弃用的方式签署您自己的脚本,应该使用New-SelfSignedCertificate.

    生成密钥:
    New-SelfSignedCertificate -DnsName email@yourdomain.com -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My

    导出没有私钥的证书:
    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt [0]将使这项工作适用于有多个证书的情况...显然使索引与您要使用的证书匹配...或者使用某种方式来过滤(通过thumprint或发行者).

    将其导入为Trusted Publisher
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

    将其作为根证书颁发机构导入.
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

    签署脚本.
    Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

显然,一旦你设置了密钥,你就可以简单地用它来签署任何其他脚本.
您可以在本文中获得更多详细信息和一些故障排除帮助.



4> JerryGoyal..:

在Powershell中使用New-SelfSignedCertificate命令相当容易.打开powershell并运行这3个命令.

1)创建证书:
$ cert = New-SelfSignedCertificate -DnsName www.yourwebsite.com -Type CodeSigning -CertStoreLocation Cert:\ CurrentUser\My

2)设置密码:
$ CertPassword = ConvertTo-SecureString -String"my_passowrd"-Force -AsPlainText

3)导出它:
Export-PfxCertificate -Cert"cert:\ CurrentUser\My\$($ cert.Thumbprint)" - FilePath"d:\ selfsigncert.pfx"-Password $ CertPassword

您的证书selfsigncert.pfx将位于@D:/


可选步骤:您还需要将证书密码添加到系统环境变量中.在cmd中输入以下内容:setx CSC_KEY_PASSWORD "my_password"



5> Yishai..:

从PowerShell 4.0(Windows 8.1/Server 2012 R2)开始,可以在没有makecert.exe的情况下在Windows中创建证书.

您需要的命令是New-SelfSignedCertificate和Export-PfxCertificate.

说明在使用PowerShell创建自签名证书.


值得一提的是,即使您安装WMF更新以在Windows 7上获取PowerShell 4.0,您也无法访问此命令.它似乎是Win8或Server 2012或更高版本.
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有