certificate - 签名工具和 300 MB 的大小限制(代码签名和验证)
问题描述
在 2018 年的签名工具文档中,它在页面底部指出,如果文件大小超过 300 MB 并且 PC 运行的是 Windows XP Service Pack 2 或更高版本,则可能无法可靠地验证由签名工具签名的文件.
我的第一个问题是这里是否有人知道这是否意味着将包括 Windows 7 和 Windows 10,而我的另一个问题是这个失败究竟是什么样的?他们在简介下的页面上的文章不再起作用,所以我被迫从其他可能亲身经历过这个问题的人那里寻找答案。这些注释似乎表明当验证签名方面的资源受到压力或限制时会出现问题。
我指的是这个页面https://docs.microsoft.com/en-us/windows/win32/seccrypto/signtool
具体的摘录是这样的......
在为运行 Windows XP Service Pack 2 (SP2) 及更高版本的计算机上使用大于大约 300 兆字节的可执行文件进行签名时,您应该使用 MakeCat 工具而不是 SignTool 工具来使用目录签名。根据验证文件的计算机的可用系统资源,某些应用程序可能无法验证大文件的二进制签名。有关详细信息,请参阅知识库文章 922225。
知识库文章 922225 似乎不再存在。
解决方案
这是我从未听说过的问题,我经常使用signtool 对超过1gb 的文件进行签名,并且从未遇到任何问题。
挖掘,我能找到的唯一参考是这个,它似乎来自微软员工:https ://groups.google.com/forum/#!msg/microsoft.public.security.crypto/Vyqbg8m9_vg/yexXlOkT2JgJ
是的,这是 Windows 基础架构的已知限制。这是操作系统的问题,而不是 signtool 本身的问题。它已在 Vista 上修复,但尚未向后移植到 XP 或 Windows 2003。
...您无法在 XP 或 Windows 2003 上验证或签署大于约 300MB 的文件。指导是将大文件分成多个较小的文件。
看起来在 Vista 或更高版本上,您可以对 >300mb 的文件使用 signtool 并且它们工作正常(在 Vista 和更高版本上),但它们不会在旧操作系统上验证。这解释了为什么我在实践中从未见过这种情况,因为我只使用 Windows 7+ 进行签名,并且不在 Vista 之前的操作系统上运行。
我碰巧有一个以这种方式签名的 964MB 文件以及一台 Windows XP 机器,所以我将它复制过来,这就是我发现的:查看文件属性,“数字签名”选项卡没有显示,就好像文件没有签名一样(显示在一个小的签名文件旁边以进行比较)。否则该文件按预期工作。
推荐阅读
- laravel - 适合移动设备上的分页(laravel bootstrap)
- command-line - 编写命令脚本以在 macbook os 的同一窗口中打开带有两个选项卡的终端
- android - 尝试添加zendesk sdk
- java - JAAS 和 Web 服务授权:获取登录用户
- ssh - 如何使用 Bitvise sftpc.exe 镜像目录
- python - 为什么一种算法比另一种算法快(用链表添加数字)
- c++ - push_back 和 insert 在我自己的向量类中无法正常工作
- apache-spark - *PySpark* TypeError: int() 参数必须是字符串或数字,而不是“列”
- r - 构建新的 R 包失败:Win10、RStudio
- ios - iOS后台模式:在后台运行位置更新后,应用程序永远不会终止