从文件中读取数字证书

Reading digital certificate from the file

我使用 Signtool.exe 签署了一个文件,现在我正尝试使用以下方法加载附加到该文件的证书

var cert = X509Certificate2.CreateFromSignedFile(filePath);

但他的行抛出错误 "Cannot find the requested object."。当我尝试从微软签名的 dll 中读取证书时,例如EntityFramework.dll,没有任何问题。我认为这可能是因为我在 Trusted Store 中没有证书,但即使将它添加到那里,它仍然会抛出错误。有谁知道如何解决这个问题?

您可以使用wintrust组件收集签名信息

   [DllImportAttribute("wintrust.dll", EntryPoint = "WTGetSignatureInfo", CallingConvention = CallingConvention.StdCall)]
    internal static extern int WTGetSignatureInfo([InAttribute()] [MarshalAsAttribute(UnmanagedType.LPWStr)] string pszFile, [InAttribute()] System.IntPtr hFile, SIGNATURE_INFO_FLAGS sigInfoFlags, ref SIGNATURE_INFO psiginfo, ref System.IntPtr ppCertContext, ref System.IntPtr phWVTStateData);

这将从 Microsoft 规定的任何可签名文件中收集签名详细信息。但是请确保您在单线程单元模型下执行给定的函数。否则你会发现 .js/.vbs 等签名脚本文件的奇怪结果

详情请参考How to validate authenticode for Javascript in C#