gpt4 book ai didi

c# - 对 Visual Studio 2012 VSIX 扩展进行数字签名

转载 作者:行者123 更新时间:2023-11-30 17:57:14 28 4
gpt4 key购买 nike

我正在尝试签署打包为 VSIX 文件的 Visual Studio 2012 扩展

我已按照 http://www.jeff.wilcox.name/2010/03/vsixcodesigning/ 中的说明进行操作;但是,我有兴趣在不指定 pfx 文件和密码的情况下执行签名。

例如,如果我要调用“signtool.exe”,我的命令行将是:

"signtool.exe" sign /n MySubjectName /t 'http://timestamp.verisign.com/scripts/timstamp.dll' /d "MyDescription" MyPackage.vsix

我知道此命令不适用于 VSIX 文件,但它确实适用于 MSI 存档。

使用此命令,我在调用 signtool 时不需要指定密码或 pfx 文件。使用指定的主题 MySubjectName 选择最佳安装的证书。

遵循 Jeff's Blog 上的代码,签名步骤需要定义 pfx 文件名和密码以创建用于签名的 X509Certificate2:

 private static void SignAllParts(Package package, string pfx, string password, string timestamp){
var signatureManager = new PackageDigitalSignatureManager(package);
signatureManager.CertificateOption = CertificateEmbeddingOption.InSignaturePart;

/*...*/

signatureManager.Sign(toSign, new System.Security.Cryptography.X509Certificates.X509Certificate2(pfx, password));
}

是否有任何涉及 PackageDigitalSignatureManager 的 API 可以让我找到一个基于 MySubjectNameX509Certificate 以便我可以反对它?

最佳答案

我通过遍历当前用户商店中的证书解决了这个问题。我按颁发者名称过滤并只获取有效证书,然后我遍历匹配的证书并返回第一个也匹配主题名称的证书:

public static X509Certificate2 Find(string issuer, string subject)
{
var certStore = new X509Store (StoreName.My, StoreLocation.CurrentUser);
certStore.Open (OpenFlags.ReadOnly);
var certCollection = certStore.Certificates.Find (X509FindType.FindByIssuerName, issuer, true);

foreach (var cert in certCollection)
{
if (cert.FriendlyName == subject)
{
return cert;
}
}

return null;
}

关于c# - 对 Visual Studio 2012 VSIX 扩展进行数字签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13370533/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com