繁体   English   中英

可以使用X509Certificate签署.NET程序集吗?

[英]Can a .NET assembly be signed using an X509Certificate?

我相信我对X509Certificate有基本的了解,并为我的开发环境创建了证书和私钥。 现在更多地了解X509Certificate类和其他相关权限。

所以在这个过程中,我决定在我的系统上安装证书后测试证书。 然后使用以下代码,我尝试验证证书身份验证的检查过程:

const string x509Cert = @"\PathToMyCertificate\LMC.cer";
var cert = new X509Certificate(x509Cert);
var pmc = new PublisherMembershipCondition(cert);
if(pmc.Check(Assembly.GetCallingAssembly().Evidence))
{
   Console.WriteLine("Assembly belongs to publisher");
}

当然,正如预期的那样,内部代码块不会执行。 所以我想用证书密钥简单地签署我的程序集,但“简单”并不像我预期的那么简单。

我使用以下代码将证书分配给我的应用程序证据:

var publisher = new Publisher(X509Certificate.CreateFromCertFile(x509Cert));
var evidence = Assembly.GetCallingAssembly().Evidence;
evidence.AddHost(publisher);

// Create an identity permission based on publisher evidence.
var x509Permission = (PublisherIdentityPermission)publisher.CreateIdentityPermission(evidence);
x509Permission.Demand();

但这似乎也没有用。 接下来,我检查了我的项目的属性,看看是否有任何方法使用X509Certificate键在那里签名,但没有。 我看到的唯一选择就是用Click Once清单签名; 但“从文件中选择”选项正在寻找.pfx扩展名。 所以我想也许这种方法只能支持Click-Once生成的证书?

每BOL,“如果您有其他格式的密钥文件或证书,请将其存储在Windows证书存储区中,并选择上一过程中描述的证书。” 我在受信任的根证书颁发机构存储中安装了我的X509Certificate。 那不是Windows证书商店吗? 因为“证书存储”窗口中没有显示任何内容。

除非我使用错误的关键字组合,否则搜索在线资源也不会产生太多影响。 现在我可以创建另一个X509Certificate和密钥,确保密钥的扩展名为.pfx,但我想确保我在正确的解决过程中,然后无所事事地转动我的车轮,我不相信这将是答案。

那么,可以使用X509Certificate签署.NET程序集吗? 如果是这样,有哪些文档可以帮助您执行此任务?

Publisher *类与Authenticode(tm)相关联。

寻找命令行工具:* signcode(或signtool)* chktrust

如何使用有效的代码签名证书对任何.exe,.dll(和.cab,.ocx)进行签名。 在Authenticode上进行谷歌搜索或“代码签名证书”也会有所帮助。

问题是你想做什么。 存在用于强命名程序集的.NET签名(使用RSA密钥对),并且存在Authenticode,它允许您以PE格式签署任何文件,包括DLL文件中的程序集。 请注意,Authenticode不是特定于.NET的,并且对.NET一无所知。 它标志着PE结构。

正如poupou所说,对于Authenticode签名(使用适合代码签名的X.509证书),您可以使用SignTool.exe工具。 .NET将在加载程序集时验证签名,但在某些情况下,此类验证可能需要额外的秒数(如果操作系统对链中的证书执行CRL和OCSP检查),则会降低程序集加载速度。

因此,您需要选择正确的工具并定义您想要实现的目标(签名是一种方法,而不是目标)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM