c# - 如何从签名的 C# exe 中读取公钥

标签 c# public-key x509 signtool

我正在使用

签署一个 dot net exe
signcode.exe with an spc/pvk combo

文件需要在运行时读取自己的Public Key,以验证一些数据。我走了很多不同的路。

我试过了

X509Certificate executingCert = X509Certificate.CreateFromSignedFile(exe);

executingCert 然后为空。我猜 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 托管接口(interface)。您可能需要使用 P/Invoke 来调用 Win32 API 中的例程,例如在 KB article: How To Get Information from Authenticode Signed Executables 中找到的例程。 .您可能需要使用 CryptQueryObject这会让你 证书,然后您可能必须找到另一个例程来从中提取公钥。

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

关于c# - 如何从签名的 C# exe 中读取公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3722610/

相关文章:

ssl - 证书颁发机构与存储的公钥

python - 有没有一种(简单的)方法可以在 Python 中解析 CRL?

c# - 当路径太长时,File.Exists() 错误地返回 false

c# - 一个项目中的IdentityServer4和Web Api身份验证失败

c# - 使用 C# 检查 Excel 工作簿是否具有宏

javascript - 如何使用 PKCS7、CAdES、S/MIME (e-cpf/e-cnpj) 签署文档,以在浏览器上使用 javascript 创建 P7S 文件?

c# - Bouncy CaSTLe 的 X509V3CertificateGenerator.SetSignatureAlgorithm 标记为已过时。我该怎么办?

c# - FileIO.WriteAsync 挂起

java - 将字节数组转换为 PublicKey java 时出错

sftp - 尝试使用 Apache Mina 为 SFTP 测试服务器实现 PublicKey 身份验证。但是没有调用 Authenticate 方法