首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对Visual Studio 2012 VSIX扩展进行数字签名

对Visual Studio 2012 VSIX扩展进行数字签名
EN

Stack Overflow用户
提问于 2012-11-14 07:15:06
回答 1查看 1.3K关注 0票数 3

我正在尝试对打包为VSIX文件的Visual Studio 2012 extension进行签名。

我遵循了http://www.jeff.wilcox.name/2010/03/vsixcodesigning/上的说明;但是,我对在不指定pfx文件和密码的情况下执行签名很感兴趣。

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

代码语言:javascript
运行
复制
"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

代码语言:javascript
运行
复制
 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,这样我就可以在上面签名了?

EN

回答 1

Stack Overflow用户

发布于 2015-03-16 17:25:46

我已经通过迭代在当前用户的存储中找到的证书解决了这个问题。我按颁发者名称过滤,只获取有效证书,然后循环匹配的证书,并返回第一个也与主题名称匹配的证书:

代码语言:javascript
运行
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13370533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档