Windows桌面端开发设置签名证书及Innosetup打包自动签名(转载)

本文介绍了如何使用makecert.exe创建X.509证书,生成发行者证书,并导出pfx文件。接着,详细讲解了如何对Windows桌面应用程序进行数字签名,包括使用SignTool对exe文件签名并加盖时间戳。此外,还阐述了如何在Innosetup中配置签名工具,实现打包过程中的自动签名。
摘要由CSDN通过智能技术生成

概述
找到一个带有数字签名的程序的的exe文件,右键属性(注意快捷方式上右键不行)

image-20220208091408477

我们可以看到有数字签名一栏,如果没有签名的就没有该选项卡,那么程序在安装或运行的时候就有可能被阻拦,那么怎么设置数字签名呢?

搜索makecert.exe的位置

我的是在下面的这个目录下

C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86

添加到环境变量

如果没有可以下载 Windows SDK for Windows

注意

一定要根据系统下载,否则会安装失败

Windows 10

https://download.microsoft.com/download/E/1/F/E1F1E61E-F3C6-4420-A916-FB7C47FBC89E/standalonesdk/sdksetup.exe

Windows 7

https://www.microsoft.com/en-us/download/confirmation.aspx?id=8279

步骤
这种方式生成的数字签名,其实意义不大,虽然程序确实是添加了数字签名,但是数字签名是不受信任的状态,最好还是从微软签发。这里生成只是方便和InnoSetup进行测试。

购买的话可以看:https://www.wosign.com/price_code.htm

image-20220208164714525

创建 X.509 证书
键入命令:

cd D:\Tools
mkdir cert
cd cert
Makecert -sv xhkj_signature.pvk -r -n "CN=河南星火燎原软件科技有限公司" xhkj_signature.cer

记住这里输入的密码,接下来会用到。

输出Succeeded即为成功。

创建发行者证书
键入命令:

Cert2spc xhkj_signature.cer xhkj_signature.spc

输出Succeeded即为成功。

导出pfx证书文件
键入命令:

pvk2pfx -pvk xhkj_signature.pvk -pi 密码 -spc xhkj_signature.spc -pfx xhkj_signature.pfx -f

其中,密码为刚刚你设置的密码。

什么都不输出,即为成功。

软件签名
键入命令:

signtool sign /f xhkj_signature.pfx /p 密码 "D:\程序打包\星火智慧校园-测试版\星火智慧校园 v3.1.8.exe"

主要要写exe的全路径。

其中,密码为刚刚你设置的密码。

加盖时间戳
键入命令:

signtool timestamp /t http://timestamp.digicert.com "D:\程序打包\星火智慧校园-测试版\星火智慧校园 v3.1.8.exe"

除了上面 Digicert 那个网址,还有如下网址可以作为替换:

http://timestamp.comodoca.com/authenticode
http://timestamp.globalsign.com/scripts/timestamp.dll

Innosetup自动签名
工具=>配置签名工具 设置完如下

mysigntool=signtool.exe sign /v  /f D:\Tools\cert\xhkj_signature.pfx /p 证书密码 /t http://timestamp.digicert.com $f

注意 其中证书密码要改成自己的实际密码

Setup下添加两行配置

[Setup]
SignTool=mysigntool
SignedUninstaller=yes

注意

这样会对打包之后的exe文件以及打包中卸载对应的exe进行数字签名,程序本身的exe是不会签名的。

要想程序本身的exe也签名就要在Source中对应可执行文件的最后添加signonce,结果如下:

[Files]
Source: "{#MySourcePath}{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion signonce
Source: "{#MySourcePath}*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

主要参考 http://diff3.com/d06/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinForms是一种用于开发Windows桌面应用程序的Microsoft.NET框架。在WinForms中实现电子签名功能可以通过以下步骤: 1. 设计界面:使用Visual Studio创建窗体应用程序,并设计一个用户界面,包括用于显示签名的画布或签名框。 2. 选择签名库:选择一个适合的电子签名库,比如Adobe Sign、DocuSign或OpenSignature等,这些库提供了API和工具来实现电子签名的功能。 3. 集成API:根据选择的签名库,下载并添加相应的API和库文件到WinForms项目中。根据API文档和示例,了解如何使用库的方法来实现电子签名功能。 4. 确定签名方式:根据需求选择签名方式,可以是手写签名、上传签名图像或数字签名等。 5. 实现签名逻辑:根据选择的签名方式,编写相应的逻辑来处理签名操作。例如,如果选择手写签名,可以通过鼠标移动和点击事件捕获用户的签名输入,并在画布上绘制签名。 6. 保存签名:将签名数据保存到本地文件或数据库,以便后续的签名验证和展示。 7. 签名验证:在需要验证签名的地方,根据保存的签名数据进行验证。可以使用签名库提供的方法来验证签名的真实性和完整性。 8. 添加其他功能:根据需求可以添加一些附加功能,比如签名预览、签名样式选择、签名撤销等。 通过以上步骤,可以在WinForms应用程序中实现电子签名功能,提升应用的用户体验和数据保密性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值