从文件中读取数字证书
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#。
我使用 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#。