我相信我对 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 证书存储中并选择前面过程中描述的证书。” 我在 Trusted Root Certificate Authorities 存储中安装了 X509Certificate。那不是 Windows 证书存储吗?因为证书存储窗口中没有显示任何内容。
除非我使用了错误的关键字组合,否则搜索在线资源也没有什么收获。现在我可以创建另一个 X509Certificate 和密钥,确保密钥的扩展名是 .pfx,但我想确保我在正确的解决方案上,然后再无偿转动我的轮子,我不相信这会是答案.
那么,可以使用 X509Certificate 对 .NET 程序集进行签名吗?如果是这样,有哪些文档可以帮助执行此任务?