一些关于双数字签名的心得

好像好久好久没更新了,其实主要是懒,事情多,没有特别好的东西值得分享,所以就没怎么打理。

不过最近一直在看数字签名相关的内容,遇到了不少问题,也解决了一些问题,仅此记录以备不时之需。

由于微软在2016年1月1日更新代码签名证书验签策略,取消对SHA1算法证书在软件数字签名验签中的支持,而最新的Windows中,SHA1的数字签名不再被认可,SHA256将成为主要的数字签名算法。但是问题也来了,由于Windows 7之前的系统对于SHA256支持有限,SHA1还是有一定的存在意义的。

对于普通用户而言,这些可能影响不大,但是对于开发者而言,确实徒增了麻烦,数字签名使用不当便会所开发的软件被微软验证策略拦截等的诸多问题。

双签名是个不错的解决方法,就是先对软件进行一次SHA1的数字签名,然后再追加一次SHA256的签名,以此来增强兼容性,保证从Windows XP到Windows 10都能够正常识别认可。

双签名操作方法:

正常情况下一般是先进性SHA1签名:

signtool.exe sign /f sha1.pfx  /p <sha1 cert password> /t https://timestamp.verisign.com/scripts/timstamp.dll <file to be signed>

然后再追加SHA256签名:

signtool.exe sign /f sha256.pfx /p <sha256 cert password> /as /fd sha256 /tr https://sha256timestamp.ws.symantec.com/sha256/ /td sha256  <file to be signed>

可附加 /ac 用法,添加交叉证书做驱动模式签名。

更多签名工具使用方法详见:https://msdn.microsoft.com/zh-cn/library/8s9b9yaz.aspx

由于老版本的signtool.exe无法对于双签名提供完美支持,所以signtool.exe最好使用新版本,比如Windows 10 SDKs中的版本。有时候单独使用上面的命令完成的双签名,在做签名校验的时候会提示缺少某些中级证书,所以为了提高签名的成功率和兼容性,建议执行一下环境清理。比如下面的命令:

delroot.exe -del -c -n "VeriSign Class 3 Public Primary Certification Authority - G5" -s -r localmachine root

certmgr.exe -del -c -n "VeriSign Class 3 Public Primary Certification Authority - G5" -s -r currentUser ca

certmgr.exe -add -c ca1.cer -s -r currentUser ca

certmgr.exe -add -c ca1-sha256.cer -s -r currentUser ca

certmgr.exe -add -c ca2.cer -s -r currentUser ca 

最后分享几个签名所用时间戳的URL。

Symantec

SHA1:https://timestamp.verisign.com/scripts/timstamp.dll

SHA256:https://sha256timestamp.ws.symantec.com/sha256

Comodoca

SHA1:https://timestamp.comodoca.com/authenticode

SHA256:https://timestamp.comodoca.com

Trustasia

SHA1:https://timestamp.trustasia.com/timstamp.dll

SHA256:https://timestamp.trustasia.com/rfc3161