我正在使用

signcode.exe with an spc/pvk combo

该文件需要在运行时读取自己的公钥,以验证一些数据。我跌倒了许多不同的途径。

我试过了

X509Certificate executingCert = X509Certificate.CreateFromSignedFile(exe);

然后执行核算为null。我猜想SignCode不会创建X509签名的文件,尽管如果有一个更改的开关,我很乐意这样做。

编辑事实证明,上述确实有效。...我的空检查向后检查(!=!==):)

Assembly asm = Assembly.GetExecutingAssembly();
string exe = asm.Location;
X509Certificate executingCert = X509Certificate.CreateFromSignedFile(exe); 

if (executingCert != null)
{
    Console.WriteLine("Assembly is signed");
    byte[] assemblyKey = executingCert.GetPublicKey();
}
有帮助吗?

解决方案

SignCode(对于.NET 1.0和1.1)使用AuthenTicode签名,据我所知,它缺少.NET Framework托管接口。您可能需要使用P/Invoke在Win32 API中调用例程,例如在此中找到的 KB文章:如何从AuthenTicode签名的可执行文件中获取信息. 。可能需要使用 cryptqueryObject 这将为您提供证书,然后您可能必须找到另一个例程来从中摘取公共钥匙。

查看此相关的堆栈流问题,该问题有很多答案: WinverifyTrust检查是否有特定的签名?

其他提示

尝试这样的事情:

Assembly.GetEntryAssembly().GetName().GetPublicKey()

在这种情况下,我使用了GetEntryAssembly,但是您当然可以在任何已加载的组件上调用该方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top