|
■No89666 (ken さん) に返信 > あるフォルダ配下にある実行ファイルについている > デジタル署名(署名者名、アルゴリズム、タイムスタンプ) > を取得して、ファイルに出力したいのですが、 > そのようなことは可能でしょうか?
X509Certificate2 クラスから辿れそうな気もするのですが、タイムスタンプが分からない…。 アンマネージ(crypt32.dll) な実装はあったのですが。
// using System; // using System.IO; // using System.Security.Cryptography; // using System.Security.Cryptography.X509Certificates;
var filePath = @"C:\Windows\explorer.exe"; using (var cert = new X509Certificate2(X509Certificate.CreateFromSignedFile(filePath))) { Console.WriteLine("FileName: {0}", Path.GetFileName(filePath)); Console.WriteLine("Subject: {0}", cert.SubjectName.Format(false)); Console.WriteLine("Issuer: {0}", cert.IssuerName.Format(false)); Console.WriteLine("SimpleName: {0} ({1})", cert.GetNameInfo(X509NameType.SimpleName, false), cert.GetNameInfo(X509NameType.SimpleName, true)); Console.WriteLine("Thumbprint: {0}", cert.Thumbprint); Console.WriteLine("SignatureAlgorithm: {0} ({1})", cert.SignatureAlgorithm.Value, cert.SignatureAlgorithm.FriendlyName); var extKeyUsage = (X509KeyUsageExtension)cert.Extensions["2.5.29.15"]; if (extKeyUsage != null) { Console.WriteLine("KeyUsage: {0}", extKeyUsage.KeyUsages); } var extEnhancedKeyUsage = (X509EnhancedKeyUsageExtension)cert.Extensions["2.5.29.37"]; if (extEnhancedKeyUsage != null) { Console.WriteLine("{0} ({1}):", extEnhancedKeyUsage.Oid.Value, extEnhancedKeyUsage.Oid.FriendlyName); //Console.WriteLine(extEnhancedKeyUsage.Format(true)); foreach (var oid in extEnhancedKeyUsage.EnhancedKeyUsages) { Console.WriteLine(" {0} ({1})", oid.Value, oid.FriendlyName); } } // UNDER CONSTRUCTION... }
|