zoukankan      html  css  js  c++  java
  • 使用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证书+密码来进行签名。于是分别寻找两种方式:

    查阅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.exe sign /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上只显示一个签名,如图所示:

  • 相关阅读:
    bootstrap
    前端框架 angularjs
    JAva集合框架
    圣诞
    IDEA
    科目三
    Bootstrap简介及Bootstrap里的栅格系统col-md/sm/xs-x;
    C# Windows service 定时发邮件功能 (用到webService)
    <转> 数据库索引的作用和优点缺点
    小知识
  • 原文地址:https://www.cnblogs.com/k1988/p/5180014.html
Copyright © 2011-2022 走看看