微软是第一个宣布了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:\test\sign\sign_sha256\xxx.pfx /p xxxx /t http://timestamp.wosign.com/timestamp /fd sha256 "D:\test_double_signed.exe"

一开始出现/as选项不识别的问题,经研究是使用的SignTool版本为6.0,因为自己机器上装了win10的sdk,于是使用了最新的C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.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.exe sign /v /f %sign_folder%example.pfx /p examplepassword /t http://timestamp.verisign.com/scripts/timestamp.dll /fd sha1 "%1"%sign_folder%\SignTool.exe sign /v /as /f %sign_folder%example.pfx /p examplepassword /tr http://timestamp.digicert.com /fd sha256 "%1"

别的自动脚本里在想要签名文件时,只需要调用sign.bat "要签名的文件的全路径"即可签名后的文件在win10等系统上显示两个签名,在xp上只显示一个签名,如图所示:

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

  1. 使用SHA256证书进行微软数字签名代码签名

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

  2. 安装软件和驱动程序需要微软数字签名无法安装?数字签名和数字证书区别

    1.安装软件和驱动程序需要微软数字签名无法安装 方法一: 1.以Win10为例,Win7同样适用,首先我们在键盘上同时按下"Windows键"+"R键",调出运 ...

  3. 沃通EV代码签名证书被微软指定用于windows10内核签名

    昨日,微软在Windows 硬件开发人员中心(获取代码签名证书)栏目,向全球Windows开发者推荐买沃通(WoSign)标准型(OV)代码签名证书和增强型(EV)代码签名证书用于数字签名各种代码(包 ...

  4. GlobalSign即将停止签发SHA1代码签名证书

    关于GlobalSign即将停止签发SHA-1代码签名的公告 尊敬的客户/合作伙伴: GlobalSign的代码签名证书产品将面临两个主要变化,如下: 一,即将停止SHA-1代码签名的签发 Globa ...

  5. 构建用于签名/加密双证书测试体系的可执行命令

    注意事项 生成证书请求的填写 范例 Subject: C = CN, ST = Beijing, L = Beijing, O = MSI, OU = msi, CN = ca, emailAddre ...

  6. 全国信息化工程师院校IT双证书职业课程认证

    一.背景介绍 自从2001年NCIE项目设立以来,致力于教育培训领域的技术和理论研究,以"Career Building"为核心理念,在教育领域协同高校.知名科研院所.大型人力资源 ...

  7. PKI/CA (6)双证书

    1. 单证书 一套公私钥, 私钥由用户自己保存,CA中心不保存,只对用户公钥发证书 Problem:政府机构无法监管(由于没有私钥,无法解密消息) 2. 双证书 两套公私钥 验签消息的那套私钥由用户自 ...

  8. sm2证书生成(双证书)

    国密双证书 双证书:包括签名证书和加密证书 双证书需要用硬件加密机生成,用gmssl命令无法生成 cfca下载双证书 1.访问https://cstest.cfca.com.cn/ 2.选:Web服务 ...

  9. 国密双证书签发及国密数据信封解析

    国密双证书的签发,及国密数字信封解析 产生签名密钥对 gmssl ecparam -genkey -name sm2p256v1 -text -out server_sign.key 产生p10签名请 ...

最新文章

  1. 大学java专业核心课程_计算机应用技术专业核心课程有哪些?
  2. Oracle删库跑路
  3. linux raid1 分区表,在 Linux 下使用 RAID(三):用两块磁盘创建 RAID 1(镜像)
  4. NDK Socket编程:面向连接的通信(tcp)
  5. c# Brush、Color、String相互转换
  6. 在windows下使用Xming+Putty显示Linux下软件图形界面
  7. unix 网络编程总结 二
  8. JAVA版村庄哨塔种子_我的世界:TOP18种子,刷怪笼、哨塔和村庄挤在一起,还不来试试?...
  9. java源代码怎么用_java源码怎么使用?java源代码用什么打开!
  10. RedHat配置阿里yum源
  11. UG NX 12.0入门
  12. python识别图片文字_python实现简单图片文字识别翻译OCR
  13. spring启动简析
  14. GPRS DTU是什么?其工作原理是什么? (转自aerkate)
  15. 空间域图像增强(matlab实现)
  16. WiFi分析仪在Android9.0上不能用解决方案
  17. python简单的青蛙旅行小游戏
  18. JAVA的3DES加密代码转成oc_iOS之DES加密
  19. php获取网卡网速,Golang 获取网卡时时带宽,可用于测速
  20. 江苏省小学生计算机装备标准,江苏省小学信息技术装备标准new.doc

热门文章

  1. Linux Kernel TCP/IP Stack — L1 Layer — NIC Controller — Buffer descriptor table
  2. DPDK — PMD,DPDK 的核心优化
  3. Go 语言编程 — 程序运行环境
  4. 机智云明星开发者 | 董程森
  5. Consul + Nginx实现自动扩容平台
  6. 仿抖音底部导航效果(一)
  7. oracle11g安装过程提示swap size 检查失败问题
  8. 自定义Unity 容器的扩展 --- Unity Application Block Event Broker
  9. storm集群和单点安装
  10. JAVA时间日期处理类,主要用来遍历两个日期之间的每一天。