捣腾数字签名

本文介绍了如何在Windows上制作和验证数字签名,包括使用makecert、cert2spc、pvk2pfx和signtool等工具。通过实践,作者理解了数字签名的工作原理和公钥密码系统,以及如何处理签名过程中的错误,如证书存储和信任问题。
摘要由CSDN通过智能技术生成

  昨天在公司的代码中,看见一个VC项目的Post Build Step会用signtool给项目生成的exe添加数字签名,而exe的某块代码会调用WinVerifyTrust这个Windows API来验证exe自己的数字签名。正好这几天稍微闲暇一些,在好奇心的驱使下便开始捣鼓起数字签名来。经过一天终于有点收获,大致理解数字签名是怎么一回事,也对公司代码的那两块地方比较理解了,于是做个小结。

 

  首先推荐读读《算法导论》31.7节The RSA public-key crptosystem的第一小节:Public-key cryptosystems,对公钥密码系统的框架做个了解,当然也可以到网上搜类似的介绍性文章。这里不用知道任何数学公式,但要理解整个系统的逻辑流程和设计思想,尤其要理解私钥、公钥的概念,并且要知道:一个消息经公钥和私钥两次编码还是消息本身,且既可以用公钥先编码,也可以用私钥先编码。在这里我还弄明白了:虽然加密和数字签名这两种手段都可以基于同样的公钥密码系统,但它们的目的和工作流程是不一样的——前者是防窃听,后者是验真伪。

 

  接下来就是捣腾Windows上的数字签名工具,实践一下。signtool是Windows SDK自带的命令行工具,用于对文件进行数字签名,也可用于验证文件和时间戳文件中的签名。公司的那个VC项目使用了如下命令对exe进行数字签名:

 

signtool /a <生成的exe>

  不过我用同样的命令在自己家电脑上给一个exe签名,却总是得到“SignTool Error: No certificates were found that met all the given criteria”的错误。捣鼓了半天才知道,如果是自己测试的话,要先用makecert、cert2spc和pvk2pfx制作一个同时包含私钥和公钥的pfx格式的证书文件,然后用pfx文件给exe签名,或者将pfx导入证书库中,让signtool自己去搜可用的证书。可参考《makecert制作数字证书》这篇文章。为了模拟公司项目,我采用了导

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值