gpt4 book ai didi

digital-signature - 从具有多个签名的签名可执行文件中读取证书数据

转载 作者:行者123 更新时间:2023-12-04 07:41:47 24 4
gpt4 key购买 nike

微软正在远离 SHA1。因此,许多可执行文件现在有两个或多个签名;一种使用 SHA1 摘要以实现向后兼容性,另一种使用 SHA256。

例如,如果您查看 vstest.executionengine.exe 的属性从 Visual Studio 2013(查看 Windows 8 或 Server 2012 上的属性),您将看到它具有来自 3 个不同证书的 3 个不同签名。

我已经有使用 CryptQueryObject 组合的代码, CryptMsgGetParam , 和 .NET SignedCms ,但它只能看到 3 个签名中的 1 个。似乎只有一封邮件有一个签名者。

我需要获取所有签名的证书信息。多重签名是如何建模的——是多条消息,还是一条消息中的多个签名者? Microsoft 是否添加了新的 API 或新标志来访问多个签名?

最佳答案

事实证明,微软(某种程度上)隐藏了后续的签名。添加另一个签名时,整个 CMS 结构将添加为一个未签名的属性。

因此,例如,解码为 .NET SignedCms 的双重签名 Authenticode 签名将有一个签名者,而 SignerInfo 将在 UnsignedAttributes 中有一个值。如果您获取属性 ASN RawData 值并将其传递给 SignedCms.Decode,您将获得第二个签名。

// decode inner signature    
signedCms2.Decode(signedCms1.SignerInfos[0].UnsignedAttributes[0].Values[0].RawData);

似乎还没有向根签名签名者添加另一个属性,而是将该属性添加到最内部的签名者属性中。

另请注意,并非所有属性都是内部签名,我认为您需要检查属性上的正确 Oid。

怀疑这是微软保持向后兼容性的最佳方式。

关于digital-signature - 从具有多个签名的签名可执行文件中读取证书数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28777582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com