代码签名的意义
当一个应用程序使用了代码签名,也就向它的用户展示了这样的宣告:应用程序的发布者是一个经过身份验证的,合法的组织或个人,下载或者使用应用程序的用户,无需担心此应用程序被黑客篡改。用户可以给予已经过代码签名的应用程序更多的信任和权限。
代码签名及信任的根证书
通常,在开发过程中,我们使用一份自签名的证书对应用程序进行代码签名,当正式发布时,就需要到第三方的机构进行证书申请和购买,然后对发布的程序进行正式的代码签名。这样做的原因是:自签名的证书,其不会自动被添加到系统的信任根证书中,而第三方签发的证书,其父级证书已经在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;
2、文件>添加删除管理单元;
3、在可用的管理单元中选择”证书“,点击添加-->确定;
4、在控制节点中展开证书-->受信任的证书颁发机构-->证书,右击所有任务-->导入;
5、最后,浏览文件导入你的证书即可。
签名脚本
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 执行签名操作
版权声明:《 vs自带工具进行代码数字签名方法&自签证书如何导入根证书区 》为zhangkang原创文章,转载请注明出处!
最后编辑:2019-11-20 20:11:19