使用SHA1、SHA2双证书进行微软数字签名

摘要:
微软是第一个宣布了SHA-1弃用计划,在2016年之后Windows和IE将不再信任SHA-1证书。正好我们公司的数字签名也到期了,索性就重新申请了sha256和sha1的新数字证书,用来给产品签名。这时就要把用了多年的自动签名脚本改为支持sha256和sha1双证书的格式。公司原使用signcode.exe和SignTool.exe两种方式进行签名,其中signcode配合另外找的signcode-pwd.exe工具和pvk+spc文件可以不需要密码即可实现签名,SignTool是直接用pfx证书+密码来进行签名。试验了下,只支持sha1和md5,不支持sha256。

微软是第一个宣布了SHA-1弃用计划,在2016年之后Windows和IE将不再信任SHA-1证书。正好我们公司的数字签名也到期了,索性就重新申请了sha256和sha1的新数字证书,用来给产品签名。

这时就要把用了多年的自动签名脚本改为支持sha256和sha1双证书的格式。公司原使用signcode.exe和SignTool.exe两种方式进行签名,其中signcode配合另外找的signcode-pwd.exe工具和pvk+spc文件可以不需要密码即可实现签名(不在此文中详诉),SignTool是直接用pfx证书+密码来进行签名。于是分别寻找两种方式:

查阅signcode的文档发现,signcode的命令行-a是用来指定数字签名的签名算法。试验了下,只支持sha1和md5,不支持sha256。所以此方法废弃。

再查阅SignTool文档,支持/fd来指定签名,试了md5、sha1、sha256均支持,所以直接在原来签名代码上添加个/sa /fd sha256后如下:

SignTool.exe sign /v /as /ac /f D: estsignsign_sha256xxx.pfx /p xxxx /t http://timestamp.wosign.com/timestamp /fd sha256 "D: est_double_signed.exe"

一开始出现/as选项不识别的问题,经研究是使用的SignTool版本为6.0,因为自己机器上装了win10的sdk,于是使用了最新的C:Program Files (x86)Windows Kits10inx86signtool.exe。ps:貌似只有win10带的才支持/as选项,但nnd这货依赖的ncrypt.dll,bcrypt.dll等dll只在vista及以上系统有,所以还在用xp的同学就不要用了。如果想拷贝到其它系统上使用,同时拷贝同目录下的:

appxpackaging.dll
appxsip.dll
mssign32.dll
opcservices.dll
signtool.exe
signtool.exe.manifest
wintrust.dll
wintrust.dll.ini
Microsoft.Windows.Build.Appx.AppxPackaging.dll.manifest
Microsoft.Windows.Build.Appx.AppxSip.dll.manifest
Microsoft.Windows.Build.Appx.OpcServices.dll.manifest
Microsoft.Windows.Build.Signing.mssign32.dll.manifest
Microsoft.Windows.Build.Signing.wintrust.dll.manifest

再试验出现以下错误:

SignTool Error:The /t option is incompatible with the /as option.

SignTool Error: Specify the RFC 3161 timestamp server's URL instead with /tr.

尝试把/t换成/tr,但是出现错误:

SignTool Error: The specified timestamp server either could not be reached orreturned an invalid response.

经过一番努力后,将http://timestamp.wosign.com/timestamp替换成http://timestamp.wosign.com/rfc3161解决问题。http://timestamp.wosign.com/rfc3161是较新的时间戳服务格式,兼容/t和/tr,而http://timestamp.wosign.com/timestamp只适用于/t。最后将两个签名指令放到批处理文件里:

set sign_folder=%~dp0%

%sign_folder%SignTool.exesign /v /f %sign_folder%example.pfx /p examplepassword/tr http://timestamp.wosign.com/rfc3161 /fd sha1"%1"

%sign_folder%SignTool.exe sign /v/as/f %sign_folder%example.pfx /p examplepassword/tr http://timestamp.wosign.com/rfc3161 /fd sha256"%1"

别的自动脚本里在想要签名文件时,只需要调用sign.bat "要签名的文件的全路径"即可签名后的文件在win10等系统上显示两个签名,在xp上只显示一个签名,如图所示:使用SHA1、SHA2双证书进行微软数字签名第1张

http://www.cnblogs.com/k1988/p/5180014.html

免责声明:文章转载自《使用SHA1、SHA2双证书进行微软数字签名》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C++ MFC学习 (六)ubuntu 16.04 设置位wifi热点 方法(手机可链接)亲测可用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

白话数字签名(番外篇)——签名EXE文件(下)

摘要如果我们在IEXPLORE.EXE上面右击,再点击“属性”,可以看到并没有显示数字签名页,但是在Process Explorer中却可以成功验证签名,这是怎么回事呢?签名EXE文件的两种方法上篇写到如果我们在IEXPLORE.EXE上面右击,再点击“属性”,可以看到并没有显示数字签名页,但是在Process Explorer中却可以成功验证签名,这是怎...

SAML在SSO中的应用

本篇文章来源于IBM:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1111_luol_sso/1111_luol_sso.html SAML 2.0 简介 SAML(Security Assertion Markup Language) 安全断言标记语言是由标识化组...

软件保护

大赛题目的理解: (猜测,为什么要出这样的一道题目)虽然Windows操作系统是目前世界上使用最广泛的操作系统,但是数据的安全存在风险。Linux操作系统的安全性能会比Windows操作系统的高很多,因为Linux操作系统的权限分配会更严格更细致,而且用户间的相互独立性能很好;Linux可以实现跨平台的硬件支持以及可靠的安全性,Linux系统是一个具有先天病...

RSA加密和数字签名在Java中常见应用【原创】

相关术语解释: RSA,参考: https://en.wikipedia.org/wiki/RSA_(cryptosystem) 非对称加密算法 ,参考:https://baike.baidu.com/item/%E9%9D%9E%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86%E7%AE%97%E6%B3%95/1208...

白话数字签名(番外篇)——签名EXE文件(上)

摘要 人家微软的软件都有数字签名,感觉好酷哦,我们写的软件也要弄个签名炫一炫。带有签名的软件非常酷在QQ的安装文件上右击,选“属性”,就可以看到QQ的数字签名了。使用Process Explorer或SREng查看系统中正在运行的程序时,也可以验证程序是否有数字签名,如果我们的程序显示“Unable to verify”,那显得多不专业呀。给自己的程序加...

vs2010的专业版下载免激活

直接用下面这个链接,亲测可用 vs2010 专业版: http://download.microsoft.com/download/4/0/E/40EFE5F6-C7A5-48F7-8402-F3497FABF888/X16-42555VS2010ProTrial1.iso 使用一个月后需要密匙:YCFHQ-9DWCY-DKV88-T2TMH-G7BH...