vs自带工具进行代码数字签名方法&自签证书如何导入根证书区

代码签名的意义

当一个应用程序使用了代码签名,也就向它的用户展示了这样的宣告:应用程序的发布者是一个经过身份验证的,合法的组织或个人,下载或者使用应用程序的用户,无需担心此应用程序被黑客篡改。用户可以给予已经过代码签名的应用程序更多的信任和权限。

代码签名及信任的根证书

通常,在开发过程中,我们使用一份自签名的证书对应用程序进行代码签名,当正式发布时,就需要到第三方的机构进行证书申请和购买,然后对发布的程序进行正式的代码签名。这样做的原因是:自签名的证书,其不会自动被添加到系统的信任根证书中,而第三方签发的证书,其父级证书已经在Windows发布时,内置到系统里了。

代码签名的基本步骤

Windows提供了一些命令行工具来生成证书和对代码进行签名,基本步骤如下所示:

1) 创建安全证书 (.cer 文件):

makecert -sv <pvk私钥文件名>.pvk -r -n “CN=<签名者名称>”+”EMAIL=<签名者邮箱地址>” <cer证书文件名>.cer

命令行解释:

-sv: 表示要创建一个私钥文件,也即一个pvk文件,-sv后面指定私钥文件名。

-r: 表示创建的是一个自签名的证书

-n:指定证书绑定的个人或组织的名称,CN是签名者名称,EMAIL是签名者电子邮件

最后是文件存储位置,建议使用绝对地址。

主要:这步需要输入密码,为了安全起见,建议输入一个秘密并牢记。

2) 将上述生成的cer文件转换为spc文件

cert2spc <cer证书文件名>.cer <spc证书文件名>.spc

3) 将pvk文件和上述步骤2中生成的spc文件合并为pfx文件

pvk2pfx -pvk <pvk证书文件名>.pvk -pi <步骤1中设置的密码> -spc <spc证书文件名>.spc -pfx <pfx证书文件名>.pfx -f

-pi:其中第一步如果没有设置密码的话就不要加此参数。

-f:表示若目标pfx文件已经存在,则进行覆盖。

4) 至此,一个自签名的pfx证书就生成了,接下来是使用signtool对应用程序进行签名了。

5) 使用如下指令对应用程序进行签名。

signtool sign /f <pfx证书文件名>.pfx /p <证书密码> <应用程序文件名>

6) 添加时间戳

添加时间戳的目的是:应用程序经过代码签名后,随着时间的流逝,证书将失效,有了这个时间戳,即便是当时签名的证书过期了,被签名的应用程序还是继续保持有效,也即:Windows不会出现证书过期的提示。但是:对于新版本应用程序的签名,还是需要一份有效的证书进行签名,所以,作为一个开发者,需要定期购买或者续期证书。

signtool timestamp /t http://timestamp.verisign.com/s/timstamp.dll <应用程序文件名>

以下是几个可以参考的时间戳服务器地址:

VeriSign: http://timestamp.verisign.com/s/timstamp.dll(推荐)

GlobalSign: http://timestamp.globalsign.com/s/timstamp.dll

Comodo: http://timestamp.comodoca.com/authenticode

TrustCenter: http://www.trustcenter.de/codesigning/timestamp

WoSign: http://timestamp.wosign.com/timestamp

测试效果

当应用程序没有经过代码签名时,如果以管理员权限打开,Windows会提示如下的警告:提示 发布者:未知

只有当应用程序经过代码签名,并且其证书被放置到信任的根证书区中,Window终于给出了如下的温馨提示:发布者:你的签名信息

导入证书

可用代码导入,参考https://www.cnblogs.com/tianciliangen/p/6092574.html

如何将证书导入到“受信任的根证书颁发机构”存储区,以下操作:

1、win+r 运行mmc;

11.jpg

2、文件>添加删除管理单元;

3、在可用的管理单元中选择”证书“,点击添加-->确定;

2.jpg


4、在控制节点中展开证书-->受信任的证书颁发机构-->证书,右击所有任务-->导入;
3.jpg
5、最后,浏览文件导入你的证书即可。

5.jpg


签名脚本


cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
makecert -sv SignatureDemo.pvk -r -n "CN=zhangkang"+"EMAIL=SignatureDemo@zhangkang.co" C:\Users\user\Desktop\SignatureDemo.cer
cert2spc C:\Users\user\Desktop\SignatureDemo.cer SignatureDemo.spc
pvk2pfx -pvk SignatureDemo.pvk -pi 123456 -spc SignatureDemo.spc -pfx SignatureDemo.pfx -f
signtool sign /f SignatureDemo.pfx /p 123456 C:\Users\user\Desktop\SignatureDemo.exe
signtool timestamp /t http://timestamp.globalsign.com/s/timstamp.dll C:\Users\user\Desktop\SignatureDemo.exe
保存SignatureDemo.bat 执行签名操作


发表评论 / Comment

用心评论~