3

我想簽署一個Visual Studio 2012 extension打包爲VSIX文件。數字簽名的Visual Studio 2012 VSIX擴展

我遵循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代碼,簽約步驟需要進行定義,以創建簽名使用的X509Certificate2 PFX文件名和密碼:

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,可以讓我找到一個X509Certificate基於MySubjectName,這樣我可以簽署反對呢?

+0

這可能包含我要尋找的答案:HTTP: //msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2collection.find.aspx –

+0

沒有這樣的API,通過使用者名稱獲取證書。但是你可以看看X509Certificate2類的Import方法。 – Sasha

回答

1

我已經通過迭代在當前用戶存儲中找到的證書來解決此問題。我由發行人名稱進行篩選,並採取唯一有效的證書,然後我遍歷所有的匹配的證書,並返回其也在本科目名稱相匹配的第一個:

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; 
} 
相關問題