从文件中读取数字证书

时间:2018-01-30 16:09:46

标签: c# cryptography x509certificate2

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

var cert = X509Certificate2.CreateFromSignedFile(filePath);

但他的行抛出错误“无法找到请求的对象。”。当我尝试从微软签名的dll中读取证书时,例如 EntityFramework.dll ,它没有任何问题。我以为可能是因为我在Trusted Store中没有证书,但即使在那里添加证书之后,它仍然会抛出错误。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用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#了解详情。