通常在C#中,当我们想要获得一些 .net文件数字签名主题名称时,我们只需使用:
string Subject = AsseblyObject.GetModules().First().GetSignerCertificate().Subject;
但我想要非托管 exe或dll文件数字签名主题名称。 有没有其他方法可以做到这一点?感谢。
答案 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;
这是一个精简版本,可以帮助您入门 - 我还有更多内置检查和异常抛出,还有很多东西需要注意。