簡體   English   中英

對Visual Studio 2012 VSIX擴展進行數字簽名

[英]Digitally sign a Visual Studio 2012 VSIX extension

我正在嘗試簽署一個打包為VSIX文件的Visual Studio 2012 extension

我已按照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博客上的代碼,簽名步驟需要定義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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM