如何获得非托管exe或DLL文件数字签名主题名称?

时间:2015-03-11 11:37:32

标签: c# .net

通常在C#中,当我们想要获得一些 .net文件数字签名主题名称时,我们只需使用:

string Subject = AsseblyObject.GetModules().First().GetSignerCertificate().Subject;

但我想要非托管 exe或dll文件数字签名主题名称。 有没有其他方法可以做到这一点?感谢。

1 个答案:

答案 0 :(得分:2)

这是我在数字签名的档案文件上使用的(即根本不管理这些文件):

using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;


var signer = X509Certificate.CreateFromSignedFile("[path to the file]");
var cert = new X509Certificate2(signer);

var certChain = new X509Chain();
certChain.ChainPolicy.RevocationFlag = X509RevocationFlag.ExcludeRoot;
certChain.ChainPolicy.RevocationMode = CheckRevocOffline ? X509RevocationMode.Offline : X509RevocationMode.Online;
certChain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 0, 0);
certChain.ChainPolicy.VerificationFlags = VerificationFlags;

var certChainIsValid = certChain.Build(cert);

if (!certChainIsValid)
{
    //file is likely to be self signed, revoked or expired
}

var subjectName = cert.SubjectName.Name;

这是一个精简版本,可以帮助您入门 - 我还有更多内置检查和异常抛出,还有很多东西需要注意。