如何使用Windows SDK中的工具创建用于代码签名的自签名证书?
当前回答
这篇文章将只回答“如果你有证书,如何签署EXE文件”部分:
为了签署exe文件,我使用MS“signtool.exe”。为此,你需要下载庞大的微软Windows SDK,其容量高达1GB。幸运的是,您不必安装它。只需打开ISO并提取“Windows SDK Signing Tools-x86_en-us.msi”。它只有400 KB。
然后我创建了这个小脚本文件:
prompt $
echo off
cls
copy "my.exe" "my.bak.exe"
"c:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64\signtool.exe" sign /fd SHA256 /f MyCertificate.pfx /p MyPassword My.exe
pause
细节
__
其他回答
从PowerShell 4.0 (Windows 8.1/Server 2012 R2)开始,不需要makecert.exe就可以在Windows中制作证书。
需要执行的命令为New-SelfSignedCertificate和Export-PfxCertificate。
说明请参见使用PowerShell创建自签名证书。
这篇文章将只回答“如果你有证书,如何签署EXE文件”部分:
为了签署exe文件,我使用MS“signtool.exe”。为此,你需要下载庞大的微软Windows SDK,其容量高达1GB。幸运的是,您不必安装它。只需打开ISO并提取“Windows SDK Signing Tools-x86_en-us.msi”。它只有400 KB。
然后我创建了这个小脚本文件:
prompt $
echo off
cls
copy "my.exe" "my.bak.exe"
"c:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64\signtool.exe" sign /fd SHA256 /f MyCertificate.pfx /p MyPassword My.exe
pause
细节
__
你可以在Visual Studio 2019的项目属性中生成一个。在驱动程序签名部分,测试证书字段有一个下拉菜单。生成测试证书是其中一个选项。证书将位于扩展名为'cer'的文件中,通常与可执行文件或驱动程序位于相同的输出目录中。
在Powershell中使用New-SelfSignedCertificate命令非常简单。 打开powershell并运行这3条命令。
创建证书: $cert = New-SelfSignedCertificate -DnsName www.yourwebsite.com -Type CodeSigning -CertStoreLocation Cert:\CurrentUser\My 为它设置密码: $CertPassword = ConvertTo-SecureString -String " my_passsowrd " -Force - as明文 出口: Export-PfxCertificate -Cert "cert:\CurrentUser\My$($cert. thumbprint)" d: \ selfsigncert -FilePath”。pfx" -Password $CertPassword
您的证书selfsigncert。pfx将位于@ D:/
可选步骤:还需要向系统环境变量添加证书密码。在cmd中输入以下命令:setx CSC_KEY_PASSWORD "my_password"
更新后的答案
如果您使用的是以下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
(^ =允许批处理命令行换行)
这将创建一个自签名(-r)证书,带有一个可导出的私钥(-pe)。它被命名为“My CA”,应该放在当前用户的CA存储中。我们使用的是SHA-256算法。该密钥用于签名(-sky)。
私钥应该存储在MyCA中。“MyCA. pvk”文件和MyCA. pvk文件中的证书。cer文件。
导入CA证书
因为如果您不信任CA证书,那么拥有它就没有意义了,您需要将其导入Windows证书存储区。您可以使用Certificates 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
如果您正在使用密码,请使用下面的密码
pvk2pfx -pvk MySPC.pvk -spc MySPC.cer -pfx MySPC.pfx -po fess
如果您想保护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 http://timestamp.digicert.com
完整的微软文档
signtool makecert pvk2pfx
下载
For those who are not .NET developers, you will need a copy of the Windows SDK and .NET framework. A current link is available here: [SDK & .NET][5] (which installs makecert in `C:\Program Files\Microsoft SDKs\Windows\v7.1`). Your mileage may vary.MakeCert可从Visual Studio命令提示符获得。Visual Studio 2015确实有它,它可以在Windows 7的开始菜单中“VS2015的开发人员命令提示符”或“VS2015 x64本机工具命令提示符”下启动(可能都在同一个文件夹中)。
推荐文章
- 浏览器会通过https缓存内容吗
- 在git存储库中处理密码的最佳实践是什么?
- 支付处理器-如果我想在我的网站上接受信用卡,我需要知道什么?
- 如何加密和解密一个PHP字符串?
- 使用80端口运行Node.js时的最佳实践(Ubuntu / Linode)
- 使用PHP进行最简单的双向加密
- JWT刷新令牌流
- 什么是回跳线?它是如何工作的?
- 可利用的PHP函数
- 删除SQL Server Management Studio中记住的登录名和密码列表
- 如何为Windows上的代码签名创建自签名证书?
- Xcode:获取进程任务失败
- 如何验证ssl证书?
- 你把盐串放在哪里?
- 在浏览器的哪里存储JWT ?如何防范CSRF?