7

我正在使用 dot net exe 签名

signcode.exe with an spc/pvk combo

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

我试过了

X509Certificate executingCert = X509Certificate.CreateFromSignedFile(exe);

然后执行证书为空。我猜 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();
}
4

2 回答 2

3

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

查看这个相关的 StackOverflow 问题,它有很多答案:WinVerifyTrust to check for a specific signature?

于 2010-09-16T21:54:05.117 回答
0

尝试这样的事情:

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

在这种情况下,我使用了 GetEntryAssembly,但当然您可以在任何加载的程序集中调用该方法。

于 2010-09-16T06:16:39.673 回答