如何使用Windows SDK中的工具创建用于代码签名的自签名证书?
当前回答
你可以在Visual Studio 2019的项目属性中生成一个。在驱动程序签名部分,测试证书字段有一个下拉菜单。生成测试证书是其中一个选项。证书将位于扩展名为'cer'的文件中,通常与可执行文件或驱动程序位于相同的输出目录中。
其他回答
如回答中所述,为了使用不弃用的方式为自己的脚本签名,应该使用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]将使此工作用于当您有多个证书时……显然,要让索引与你想要使用的证书相匹配…或采用一种滤液方式(指纹或发胶)。
将其作为受信任的发布者导入
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher
将其作为根证书颁发机构导入。
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root
为脚本签名(假设这里的脚本名为script)。Ps1,修正相应的路径)。
Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)
显然,一旦设置了密钥,就可以简单地用它为任何其他脚本签名。 您可以在本文中获得更详细的信息和一些故障排除帮助。
在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"
从PowerShell 4.0 (Windows 8.1/Server 2012 R2)开始,不需要makecert.exe就可以在Windows中制作证书。
需要执行的命令为New-SelfSignedCertificate和Export-PfxCertificate。
说明请参见使用PowerShell创建自签名证书。
你可以在Visual Studio 2019的项目属性中生成一个。在驱动程序签名部分,测试证书字段有一个下拉菜单。生成测试证书是其中一个选项。证书将位于扩展名为'cer'的文件中,通常与可执行文件或驱动程序位于相同的输出目录中。
罗杰的回答很有帮助。
不过,我在使用它时遇到了一点麻烦,一直出现红色的“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
推荐文章
- 浏览器会通过https缓存内容吗
- 在git存储库中处理密码的最佳实践是什么?
- 支付处理器-如果我想在我的网站上接受信用卡,我需要知道什么?
- 如何加密和解密一个PHP字符串?
- 使用80端口运行Node.js时的最佳实践(Ubuntu / Linode)
- 使用PHP进行最简单的双向加密
- JWT刷新令牌流
- 什么是回跳线?它是如何工作的?
- 可利用的PHP函数
- 删除SQL Server Management Studio中记住的登录名和密码列表
- 如何为Windows上的代码签名创建自签名证书?
- Xcode:获取进程任务失败
- 如何验证ssl证书?
- 你把盐串放在哪里?
- 在浏览器的哪里存储JWT ?如何防范CSRF?