Microsoft is moving away from SHA1. As a result many executables now have two or more signatures; one using a SHA1 digest for backward compatibility and one using a SHA256.
For example if you look at the properties of vstest.executionengine.exe
from Visual Studio 2013 (look at the properties on Windows 8 or Server 2012) you'll see it has 3 different signatures from 3 different certificates.
I already have code that uses a combination of CryptQueryObject
, CryptMsgGetParam
, and .NET SignedCms
, but it only sees 1 of the 3 signatures. There appears to be only one message with one signer.
I need to get the certificate information for all signatures. How are multiple signatures modeled - is it multiple messages, or multiple signers in a single message? Did Microsoft add new APIs or new flags to access multiple signatures?