android 签名 时间戳,signtool签名时间戳失败的解决方法

作者:梁敏

之前在win7上打包windows程序版本时,偶尔会遇到签名时间戳会失败的场景。之前解决方法一般是多试一次,或者尝试换一个时间戳服务器就可以了。

最近版本提测上线,在使用win7打包版本时,总是签名时间戳失败了,几乎是每次都不行。但是尝试替换各种服务器,还是不行。另外使用wosigncode.exe的工具,使用相同的时间戳服务器,都是可以成功的。说明不是时间戳服务器的问题。记得之前的项目打包时,也有在win7下有时候签名时间失败的,在win10上是ok的。之前所在团队还专门找了一台win10用来打包,同时自己也是用的是win10系统,所以也没有深入了解当时的原因。现在的项目打包在win7上也出现了签名时间戳失败的情况,之前是偶尔,最近是必现了。但是最近版本上线,为此升级win10来不及,还比较耗时。还是耐心的看看有没有什么解决办法吧,给自己半天时间看能否解决。

签名时间戳的命令如下:

signtool sign /f MyCert.pfx /t http://timestamp.verisign.com/scripts/timstamp.dll MyFile.exe

或者

signtool timestamp /t http://timestamp.verisign.com/scripts/timstamp.dll MyFile.exe

运行后报错如下:

SignTool Error: An error occurred while attempting to timestamp: MyFile.exe

SignTool Error: An unexpected internal error has occurred.

Error information: "SignerTimeStamp() failed." (-2147024895/0x80070001)

官方有提到这里的错误码0x800*****,和我这个类似,如下:

24978aa4e760094e6be5c4391b0cb303.png

但是没有对我遇到的这个错误码0x80070001的问题说明。那就搜这个错误码有没有相关的案例:“signtool 0x80070001”,但是遇到同样错误码的几乎没有。google大法,各种搜索,SignerTimeStamp() failed,SignTool Error。寻求到的解决方案,有说管理员身份运行,有说时间戳服务器换一换,有说...。不过,都不行。

后来,转变思路,在C盘搜了一下本机的signtool.exe,

C:\Program Files (x86)\Windows Kits\8.0\bin\x86

C:\Program Files (x86)\Windows Kits\8.1\bin\x86

C:\Program Files (x86)\Windows Kits\10\bin\x86

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin

搜索了下,拿来替换到我们项目里之前保存的signtool.exe试一试吧。

在逐一替换了之后,发现使用C:\Program Files (x86)\Windows Kits\8.1\bin\x86下的signtool.exe打包总是成功的。查看我们项目里的打包单独引用的signtool.exe是windows Kits的10.0版本的,这也就说明了之前项目在win10上签名成功,win7容易失败。而我现在使用的是vs2013在win7上生成的程序,使用8.1低版本的更匹配。

我们项目使用的是VS2013,接下来使用VS2013的Visual Studio Tools下的VS2013 x86 本机工具命令提示工具,输入signtool命令操作,发现也是成功。

1227b7709f8c9af3540544e0818cab81.png

那接下来看看VS2013工具使用的是哪个版本路径下的signtool吧。在

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\路径下的VCVarsQueryRegistry.bat文件,写明了工具窗口调用的windowsSDK的路径:

5f773a4fc976c3da99f29d601f4ec032.png

从脚本中得知,是从注册表中获取windowsSDK 8.1的安装路径,那也就是说VS2013工具是使用C:\Program Files (x86)\Windows Kits\8.1\bin\x86路径下的signtool.exe的。那我们也用这个签名时间戳应该没问题了,把该文件拷贝到我们项目后验证是可以正常使用了。顺便看了下,VS2015的工具在没有指定的情况下,是优先使用WindowsSDK 10,没有安装10会使用WindowsSDK 8.1版本的。

9ff73a2b3cf17d9e62ca8c897fa17de6.png

好了,问题解决了,原来最后解决方法如此简单低级。不过,貌似工作中解决的非必现、各种疑难问题,其背后都是一些低级的简单的方法,重要的是问题解决了,以及过程中分析解决问题的思路,不是吗?

以此记录下最近遇到的签名时间戳失败的解决方法。有描述不准确的地方,欢迎大家指正~

本文来自网易实践者社区,经作者梁敏授权发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
感谢下载 Microsoft .NET Framework 4.5 注意:Windows 8 和 Windows Server 2012 包括 .NET Framework 4.5。因此,您不必在这些操作系统上安装此软件。 .NET Framework 4.5 是一个针对 .NET Framework 4 的高度兼容的就地更新。通过将 .NET Framework 4.5 与 C#、Visual Basic 或 F# 编程语言结合使用,您可以编写 Windows 应用程序。.NET Framework 4.5 包括针对 C#、Visual Basic 和 F# 的重大语言和框架改进(以便您能够更轻松地编写异步代码)、同步代码中的控制流混合、可响应 UI 和 Web 应用程序可扩展性。.NET Framework 4.5 添加了针对其他功能区域(如 ASP.NET、Managed Extensibility Framework、Windows Communication Foundation、Windows Workflow Foundation 和 Windows Identity Foundation)的大量改进。.NET Framework 4.5 提供了更高的性能、可靠性和安全性。 有关 .NET Framework 4.5 的这些功能及其他功能的详细信息,请参见 .NET Framework 开发中心网站。 注意:.NET Framework 4.5 可再发行组件包于 2012 年 10 月 9 日更新,此更新更正了与数字证书上时间戳不正确相关的问题,此问题导致由 Microsoft 生成并签署的文件上的数字签名过早到期。对于之前安装过 .NET 4.5 可再发行组件包(2012 年 8 月 16 日发行)的客户,我们建议安装此经过更新的 .NET 4.5 可再发行组件包。有关此问题的详细信息,请参见 Microsoft Security Advisory 2749655。(来自官网)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值