不打补丁的火星 Windows 7,安装 .net 4.X 失败,时间戳签名和/或证书无法验证或已损坏
我有一台 Windows 7 的虚拟机,不用想,没有打过安全补丁,是一个火星 Windows 7。今天找出来测试软件,要装 .net 4.7 运行库,本来跃跃欲试了,结果进度条走一半安装失败,原因如题。错误代码:0x80096005。对应英文版应该是:The timestamp signature and/or certificate could not be verified or is malformed.
懂技术的朋友应该能明白其中的缘由,是系统由于没有打过安全补丁,内置的信任根证书列表太旧失效了,无法验证、信任微软自家用新证书签名的 msi 安装程序(主要是时间戳证书无法验证可信),导致微软“我杀我自己”阻止了安装。为了安全嘛,验证系统库安装程序签名并阻断不信任的情况,应该的应该的,道理我都懂。但我理解现在的这个局面的症结,真想让 Windows 无视证书错误继续安装,但可惜 Windows 是个程序,不是工程师,无法和他交流表明技术意图让他给我变通变通。
解决方法:
- (对一般用户)装 KB3033929 补丁[1](64 位/32 位),让万年不打补丁的火星 Windows 7 系统更新一下内置的受信任的根证书。
- (对技术用户)有一定技术基础的话,不打补丁也可以,直接从证书链上信任根证书:进入安装界面后先不点安装,找到解包的 msi 安装程序文件,位于启动 installer 时自解包到的临时目录下(一般是 C:\一串随机字符\),右键属性查看 msi 文件的数字签名,检查签名证书和时间戳证书详情,它们的证书链上的根证书应该有红叉提示不可信的,选中不可信的根证书,直接安装到受信任的根证书颁发机构。大概就是这样,懂得都懂。没懂、做不来就老实装补丁。毕竟这种操作让用户来做肯定是大大的错误,不合规不安全,但是你是极客,所以才我分享这种做法,非技术用户请勿依照执行。这种做法能过安装(我就是这种方式做的),但没打补丁,不排除因根证书信任不全,而在后续使用中翻车的风险可能。
目前在中文互联网上,我似乎没有搜到对这个问题的来龙去脉解释得比较清楚的文章。有一些博客文章指出了要下载根证书安装信任,但可惜那些文章提供的根证书下载,和我这边遇到的时间戳所需要装的根证书不是同一个。只能说思路是对的,但是提供资源时没考虑泛化情况,有些不负责,授人以鱼不如授人以渔。所以,我解决之后就写了这篇文章,希望能帮到更多人吧。不过这个问题和需求确实挺小众的,除了那些内网隔离、特殊场景的系统,普通 C 端用户的系统打上补丁的比例和概率应该还是蛮高的。
[1] 本文提供的补丁信息来源于 YouTube 上的这个视频:https://www.youtube.com/watch?v=tIMEsfLJX04
评论
牛
好文章,实用
收藏了
我的win7连补丁都没办法安装 要咋办啊
非常感谢大佬的文章,帮大忙了
发表评论